应用级并发应用情况:访问慢速I/O设备;与人交互;通过推迟工作以降低延迟;服务多个网络客户端;在多核机器上进行并发计算。
三种基本构造并发程序的方法:进程、I/O多路复用、线程
1、基于进程的并发编程
例如构建一个并发服务器:
假设有1个服务器和2个客户端,服务器正在监听listenfd(3)上的连接请求,客户端1向服务端请求,服务端返回一个连接描述符connfd(4),同时服务器会生成一个子进程,子进程完全复制服务器描述符表,并关闭其监听符listenfd(3),服务器关闭已连接的描述符connfd(4)。客户端2请求时,同样派生一个子进程服务。
优劣:
父子进程间共享文件列表,但不共享用户地址空间,一个进程不可能覆盖另一个进程的虚拟内存。但缺点是独立的地址空间使得进程共享状态信息更困难,需要IPC机制(管道,消息队列,共享内存,),比较缓慢。
2、基于I/O多路复用的并发编程
适用场景:1)网络客户端发起连接请求 2)用户在键盘上键入命令行
基本思想:用select函数将进程挂起,只有在一个或多个I/O事件发生后,才将控制返回给应用程序。
3、基于线程的并发编程
线程就是运行在进程上下文中的逻辑流。线程包括线程ID、栈、栈指针、程序计数器、通用目的寄存器和条件码。
线程执行模式:先有一个主线程,主线程创建一个对等线程,两个线程并发执行。
多线程和多进程的区别:1、一个线程的上下文要比一个进程的上下文小很多,切换更快。2、线程不是按照严格的父子层次来组织的&#