多线程 -- 6




概述此前,我们曾经介绍过 linux 下的进程和线程:线程的基本概念本篇日志中,我们来介绍一下 java 的线程并发模型,主要来看看 java 的线程有哪些优势与潜在的危险 线程的优势多线程并发编程的优势是显而易见的:发挥多处理器的强大能力简化任务模型简化异步事件的处理,降低开发难度任务的快速响应 安全性问题正如此前的日志中详细介绍过的 linux 线程中复杂的安全性问题,java 线程安全性问题也是同样复杂多个线程的执行顺序是不可预测的,因此可能会产生奇怪的结果 public class UnsafeSequence { private int value; public int getNext() { return value++; } } 上面的代码是非线程安全的,尽管这个类中仅仅包含的 getNext 方法看上去非常简单,但它包含了三个操作:读取 value将 value + 1将结果写入 value在多线程并发的情况下,第一个线程还没有执行到第三步时,第二个线程读取 value,那么两个线程将读取到同一个 value 值,因此他们通过加
#技术帖    #技术分享    #线程    #多线程   
迭代服务器迭代服务器的主进程即监听进程,进入监听状态后阻塞于 accept 操作,当监听进程 accept 到新的连接后,通过 fork 方式派生出来服务进程处理请求,处理完成后服务进程退出Apache web服务器就是以这种方式工作的优点开发流程清晰,并且服务进程与主进程隔离,安全性高缺点频繁 fork 带来机器性能的损耗,效率较低,适合请求并发量小,每次请求处理比较耗时的业务并发性服务器与迭代服务器相同,主进程进入监听状态,然后创建一个进程池或线程池,池中的业务进程或业务线程都在该 socket 上执行 accept 操作竞争请求处理权,进行请求的处理,主进程(主线程)负责维护进程池(线程池)中进程(线程)的数量和状态优点拥有较强的并发性能,可以处理并发请求量较大的应用场景异步服务器由于IO复用模型 select、epoll 等同时等待多个描述符的卓越性能,可以大大提高网络操作的效率,因此越来越多的开源力作使用异步模型进行服务的处理,如 memcache、redis、nginx 等在单进程中,监听线程通过 select、epoll 等IO复用模型进行整个服务中网络连接、读写等事件的监听优点网
#技术帖    #apache    #服务器    #技术分享   
问题/* * file: main.c * author: 龙泉居士 * date: 2012-12-22 05:23 */ #include <pthread.h> #include <stdio.h> #include <stdlib.h> #define NUMBER_OF_THREADS 10 void *print_hello_world (void *tid) { printf ("Hello World from thread %d\n", tid); pthread_exit (NULL); } int main (int argc, char *argv[]) { pthread_t threads[NUMBER_OF_THREADS]; int status, i; for (i=0; i<NUMBER_OF_THREADS; ++i) { printf ("Main Hear, Creating thread %d\n", i); status = pthread_create (&threads[i], NULL, print_hello_world, (void *)i); if (sta
#技术帖    #linux    #unix    #c语言   
问题fork调用只会复制调用线程,既然fork复制父进程地址空间中的全部内容,为什么只复制调用线程?难道线程不在进程的地址空间中吗? 解答:进程的地址空间主要是指内存的部分,而是否只复制调用线程,这是操作系统决定的特性 
#技术帖    #unix    #技术分享    #线程   



京ICP备15018585号