码迷,mamicode.com
首页 > 其他好文 > 详细

信息安全系统设计基础第13周学习总结

时间:2015-12-04 20:30:11      阅读:116      评论:0      收藏:0      [点我收藏+]

标签:

知识点总结

并发编程*序

  1. 并发:逻辑控制流在时间上重叠。
  2. 应用级并发的应用:
  •   访问慢速I/O设备
  •   与人交互
  •   通过推迟工作以降低延迟
  •   服务多个网络客户端
  •   在多核机器上进行并行计算
  •   进程
  •   I/O多路复用
  •   线程

基于进程的并发编程

最简单的构造并发程序的方法是进程。

下图是基于进程的并发echo服务器:

几点需要说明的内容:

  • 因为服务器会运行很长时间,所以需要一个SIGCHLD处理程序来回收僵死子进程的资源。
  • 父子进程必须关闭它们各自的connfd拷贝,以避免存储器泄露。
  • 因为套接字的文件表表项的引用计数,直到父子进程的connfd都关闭了,到客户端的连接才会终止。

关于进程的优劣:

对于在父子进程之间地址空间共享状态信息,进程有一个非常清晰的模型:共享文件表但是不共享用户。

基于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是共享的,当且仅当它的一个实例被一个以上的线程引用。

 

用信号量同步线程

 

信息安全系统设计基础第13周学习总结

标签:

原文地址:http://www.cnblogs.com/20135303whq/p/5020246.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!