标签:
知识点总结
并发编程*序
基于进程的并发编程
最简单的构造并发程序的方法是进程。
下图是基于进程的并发echo服务器:
图
几点需要说明的内容:
关于进程的优劣:
对于在父子进程之间地址空间共享状态信息,进程有一个非常清晰的模型:共享文件表但是不共享用户。
基于I/O多路复用的并发编程
基本思路:使用select函数,要求内核挂起进程,只有在一个或者多个I/O事件发生后,才将控制返回给应用程序。
select函数处理类型为fd_set的合集,也叫做描述符合集。当且仅当bk=1时,,描述符k才表明是描述符集合里的一个元素。
只允许你对操作符集合做三件事:1.分配它们;2.将一个此种类型的变量赋值给另一个变量;3.用FD_ZERO,FD_SET,FD_CLR,FD_ISSET宏指令来修改和检查它们。
select函数有两个输入:一个称为读集合的描述符合集和该读集合的基数(n)。
当且仅当一个从该描述符读取一个字节的请求不会阻塞时,描述符K就准备好可以读了。
图
基于I/O多路复用的 并发事件驱动服务器
将逻辑流模型化为状态机。一个状态机就是一组状态、输入事件和转移,其中一个转移就是将状态和输入事件映射到状态。每个转移都将一个(输入状态,输入事件)对映射到一个输出状态。自循环是同一输入输出状态的转移。一个状态机从某种初始状态开始执行,每个输入事件都会引发一个当前状态到下一个状态的转移。
服务器使用I/O多路复用,借助select函数检测输入事件的发生。当每个已连接描述符准备好可读时,服务器就为相应的状态机执行转移,在这里就是从描述符读和写回一个文本行。
基于线程的并发编程
线程就是运行在进程上下文中的逻辑流。
posix线程
图
创建线程
图
终止线程
图
回收已终止线程的资源
图
分离线程
图
初始化线程
图
一个基于线程的并发服务器
图
多线程程序中的共享变量
线程存储器模型
一组并发线程运行在一个进程的上下文中。每个线程都有它自己独立的线程上下文,包括线程ID、栈、栈指针、程序计数器和通用目的寄存器值。每个线程和其他线程一起共享进程上下文的其他部分。这包括整个用户虚拟地址空间,它是由只读文本(代码)、读写数据、堆以及所有共享库代码和数据区域组成的。线程也共享同样的打开文件的集合。寄存器从不共享。
将变量映射到存储器
线程化的C程序中变量根据它们的存储类型被映射到虚拟存储器:
共享变量
一个变量v是共享的,当且仅当它的一个实例被一个以上的线程引用。
用信号量同步线程
标签:
原文地址:http://www.cnblogs.com/20135303whq/p/5020246.html