信息安全系统设计基础第十三周学习总结
2015-12-06 16:22
232 查看
信息安全系统设计基础第十三周学习总结
第十二章 并发编程
并发:逻辑控制流在时间上重叠
应用级并发:
访问慢速设备
人机交互
通过推迟工作以降低延迟
服务多个客户端
在多核机器上进行并行计算
进程:
进程并发服务器:在父进程中接受客户端连接请求,再创建一个新的子进程来为每个新客户端提供服务。
进程共享文件表,但不共享用户地址空间。
基于I/O多路复用的并发编程
使用select函数,要求内核挂起进程,只有在一个或多个I/O事件发生后,才将控制返回给应用程序
两个输入:
读集合
读集合的基数n
事件驱动程序:流因为某种事件而前进
状态机:状态,输入事件和转移
基于线程的并发编程
线程:运行在进程上下文中的逻辑流
线程上下文:线程ID,栈,栈指针,程序计数器,通用目的寄存器和条件码
运行在一个进程里的线程共享该进程的虚拟地址空间,包括代码,数据,堆,共享库和打开的文件
Posix线程
void *thread(void *vargp); int main() { pthread_t tid; Pthread_create(&tid, NULL, thread, NULL); Pthread_join(tid,NULL); exit(0); } void *thread(void *vargp) { printf(“Hello , world\n”); return NULL; }
pthread_create返回时,参数tid包含新创建线程的ID
pthread_join函数会阻塞,直到进程tid终止,将线程例程返回的(void*)指针赋值为thread_return指向的位置,然后回收已终止线程占用的所有存储器资源。
多线程程序的共享变量
一个变量是共享的,当且仅当多个线程引用这个变量的某个实例
寄存器从不共享,虚拟存储器总是共享的
同步线程
一般而言,你无法预测操作系统能否为你的线程选择一个正确的顺序
不安全区:毗邻不安全区的状态并不是不安全区的一部分
信号量
信号量s是具有非负整数值得全局变量
信号量不变性:一个正确初始化了的信号量不可能有一个负值。
基于预线程化的并发服务器
服务器由一个主线程和一组工作者线程构成
主线程不断接受连接请求,并将得到的连接描述符放在一个有限的缓冲区中
每个工作者线程反复地从共享缓冲区中取出描述符,为客户端服务,然后等待下一个描述符
并行程序:一个运行在多个处理器上的并发程序
并行程序往往写为
每个核上只运行
一个线程
加速比:
强扩展: Sp = T1 / Tp
Tk是k个核上的运行时间,p为处理器核的数量
绝对加速比:T1为程序顺序执行版本的执行时间的Sp
相对加速比:T1位程序并行版本在一个核上的执行时间的Sp
效率:Ep = Sp / p = T1 / (p*Tp)
线程安全:当且仅当一个函数被多个并发线程反复调用时,他会一直产生正确结果
四类线程不安全函数:
1 不保护共享变量的函数
2 保持跨越多个调用的状态的函数
3 返回指向静态变量的指针的函数
4 调用线程不安全函数的函数
可重入性:当函数被多个线程调用,不会引用任何共享数据
显式可重入:所有函数参数都是传值传递,所有数据引用都是本地自动栈变量
隐式可重入:显式可重入加上一些参数是引用传递(指向非共享数据的指针)
竞争:当一个程序的正确性依赖于,一个线程要在另一个线程到达y点之前到达它的控制流中的x点,就会发生竞争
线程化的程序必须对任何可行的轨迹线都正确工作
死锁:一组线程被阻塞了,等待一个永远也不会为真的条件。
死锁不总是可以预测的,而错误常常不可重复。
互斥锁加锁顺序规则:如果对于程序中每对互斥锁(s,t),给所有的锁分配一个全序,每个线程按照这个顺序来请求锁,并且按照逆序来释放,那么它就是无死锁的。
参考资料:《深入理解计算机系统》(第二版)
相关文章推荐
- LightOJ 1043 - Triangle Partitioning (简单数学)
- 重排n^2宫问题
- C++入门(1)简单变量和数据类型
- mongodb数据库
- 独木舟上的旅行
- 图像滤镜艺术---乐高像素拼图特效
- 完美解决 Linux 下 Sublime Text 3中文输入
- c标签 if else c标签 总结
- iOS 下如何设置全局字体?
- 鸡兔同笼
- 中华英才网为什么没落了?
- 解决Tomcat: Can't load IA 32-bit .dll on a AMD 64-bit platform问题
- 反汇编工具 objdump的使用简介
- fastdfs学习笔记之安装
- hdu1394 Minimum Inversion Number
- 快速寻找满足条件的两个数
- Hdu 5570 概率期望
- win8下建立wifi热点
- javaScript基础练习题-下拉框制作
- Android自定义GifView显示gif动画