多任务处理

来源:互联网 发布:电脑雕刻软件 编辑:程序博客网 时间:2024/06/03 11:36
----------------------------------------------------------------
并行任务处理:并发,多cpu, 多进程, 多线程
----------------------------------------------------------------

操作系统能同时运行几个程序(独立运行的程序又称之为进程),
对于同一个程序,它又可以分成若干个独立的执行流,我们称之为线程,线程提供了多任务处理的能力。
进程和线程的概念的出现,对提高软件的并行性有着重要的意义。现在的大型应用软件无一不是多线程多任务处理

每个进程是由独立的虚拟地址空间、代码、数据和其它系统资源组成。进程在运行时创建的资源随着进程的终止而死亡。
线程的基本思想很简单,是进程内部的一个独立的执行单元,相当于一个子程序
单独一个执行程序运行时,缺省地包含的一个主线程,主线程以函数地址的形式出现,提供程序的启动点,
如main()或WinMain()函数等。当主线程终止时,进程也随之终止。根据实际需要,
应用程序可以分解成许多独立执行的线程,每个线程并行的运行在同一进程中。

一个进程中的所有线程都在该进程的虚拟地址空间中,使用该进程的全局变量和系统资源。
操作系统给每个线程分配不同的CPU时间片,在某一个时刻,CPU只执行一个时间片内的线程,
多个时间片中的相应线程在CPU内轮流执行,由于每个时间片时间很短,
所以对用户来说,仿佛各个线程在计算机中是并行处理的。
操作系统是根据线程的优先级来安排CPU的时间,优先级高的线程优先运行,优先级低的线程则继续等待。

并发处理带来的编程问题:
多cpu 竞争,多进程竞争,多线程竞争。

函数的重入性,对全局变量访问的互斥性。

多线程编程中要求函数具有重入性,
重入性要求函数不能采用全局变量。 若必须采用全局变量,需要用锁保护全部变量使用的正确性和原子性
mutex互斥信号量锁住的仅仅是一个变量,但它企图阻塞住一段程序, 保证这段程序的原子性。
这要求大家必须符合一定的规范,才能达到目的,例如锁的个数,时间要尽量少,多个锁不能死锁。
windows 下有enter_critical_section 函数调用
保证代码的原子执行。 意图重入的线程将会被阻塞与此。

0 0