并发编程编程
1、基于进程的并发编程服务器
构造并发进程最简单的方法是用进程,使用像fork,exec和waitpid等函数。多线程
例:一个构造并发服务器的天然方法就是在父进程中接受客户端链接请求,而后建立一个新的子进程来为每一个新客户端提供服务。并发
一、 一般服务器运行很长的时间,因此咱们必需要包括一个SIGCHLD处理程序,来回收僵死子进程的资源。函数
二、 其次父进程必须关闭他们各自的connfd拷贝。spa
三、 最后,由于套接字的文件表选项中的引用计数,直到父子进程的connfd都关闭了,到客户端的链接才会终止。线程
2、基于I/O多路复用的并发进程指针
基本的思路就是使用select函数,要求内核挂起进程,只有在一个或多个I/O事件发生后,才将控制返回给应用程序。接口
Select函数处理类型为fd_set的集合,也叫作描述符集合。逻辑上,咱们将描述符集合当作一个大小为n的位向量生命周期
I/O多路复用能够用做并发事件驱动程序的基础,在事件驱动程序中,流是由于某种事件而前进的。通常概念是将逻辑流模型转换为状态机。
状态机:就是一组状态、输入事件和转移。
3、基于线程的并发编程
线程就是运行在进程上下文中的逻辑流。
多线程的执行模型在某些方面和多进程的执行模型是类似的。
每一个进程开始生命周期时都是单一线程,这个线程为主线程。在某一时刻,主线程建立一个对等线程,从这个时间点开始,两个线程就并发地与运行。
Posix线程是在C程序中处理线程的一个标准接口。
终止进程:
一、 当顶层的线程例程返回时,线程会隐式地终止
二、 经过调用pthread_exit函数,线程会显示地终止。
三、 某个对等线程调用Unix的exit函数,该函数终止进程以及全部与该进程相关的线程
四、 另外一个对等线程经过以当前线程ID做为参数调用pthread_cancle函数来终止当前线程
4、多线程程序中的共享变量
一组并发线程运行在一个进程的上下文中。每一个线程都有它本身独立的线程上下文,包括线程ID、栈、栈指针、程序计数器、条件码和通用目的寄存器值。每一个进程和其余进程一块儿分享线程上下文的剩余部分。
将变量映射到存储器:
线程化的C程序中变量根据它们的存储类型被映射到虚拟存储器:全局变量、本地自动变量和本地静态变量。
----------------------------------------------------------------------------------
参考资料:
深刻理解计算机系统