本人一直对线程的概念不是很懂,那位高手可否指点一下

keke001 2004-04-08 06:39:16
本人一直对线程的概念不是很懂,那位高手可否指点一下
...全文
97 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
keke001 2004-04-17
  • 打赏
  • 举报
回复
真是非常感谢
cjf1009 2004-04-10
  • 打赏
  • 举报
回复
进程、线程和通信

(2)进程执行过程中的控制线索叫作线程(Thread), 程序计数器的状态, 以及CPU中其它寄存器的状态显示了该控制线索.


(1)一个正在执行的程序叫作进程(process), 进程要占用系统资源.


(3)计算机内部就是一个小的网络系统, 各部件通过接口电路(寄存器)与通信总线相连, 在控制器的控制下协调一致, 彼此相互通信.

进程:多任务系统的产物



很久很久以前,是没有进程这个东西的。那时候的操作系统只能把要做的工作排好队,做完这件再做下一件,最多也就加个优先级,哪个关系好就先做哪一个。于是那些想一边听歌一边写程序的程序员们便不干了,开始修理那个操作系统,使之能同时运行多个程序。于是进程就出现了:它就是一个程序在数据集合上的一次执行。



因为突然变得僧多粥少了,所以每个进程只好做一些额外的事情:在别人使用之前把自己的东西收拾好,下次轮到自己时再摆出来。为了保存这些额外的东西,进程的结构也发生了相应的变化。一个进程被分成三大部分:代码段、数据段和PCB(进程控制块) 。






在多出来的PCB中,我们保存了如下信息:



l 进程标识符(操作系统用于识别进程的唯一标识)

l 处理机状态(主要是通用寄存器,指令寄存器,PSW和用户栈指针)

l 进程调度信息(状态、优先级,被阻塞原因和其他一些乱七八糟的东西)

l 进程控制信息(同步信息、代码段和数据段的信息、资源清单和指向下一个PCB的指针)



操作系统正是通过PCB来管理这多个进程。在这样的系统里,进程既是操作系统独立调度和分派的基本单位,又是一个可拥有资源的独立单位。



线程:进程的再分身



好了,现在程序员可以一般听歌一边写程序了。可是不幸的或者说是幸运的,新的问题出现了。如果多个进程间使用很多相同数据的话,实在是太浪费了。我们当然不能允许这样的事情持续下去,所以线程出现了。同一个进程下可以拥有多个线程,它们共享这个进程的资源,它们之间的切换也不再需要PCB,而只需要极少一点资源就可以了。在这样的操作系统里,线程变成了系统调度和分派的基本单位。



简单的说进程和线程有如下不同:



l 进程可以拥有资源,线程共享进程拥有的资源

l 进程间的切换必须保存PCB,同个进程的多个线程间的切换不用那么麻烦



最后我们以一个实例来作为本文的结束:

当你在一台PC上打开两个QQ时,每一个QQ是一个进程;而当你在一个QQ上和多人聊天时,每一个聊天窗口就是一个线程。

http://www.delphibbs.com/keylife/iblog_show.asp?xid=1193
wnhoo 2004-04-08
  • 打赏
  • 举报
回复
从进程开始说起:
进程通常被定义为一个正在运行的程序的实例,它是资源分配的单位;
线程没有很确切的定义,它是CPU进行调度的单位。
进程是不活泼的。若要使进程完成某项操作,它必须拥有一个在它的环境中运行的线程,该线程负责执行包含在进程的地址空间中的代码。当创建一个进程时,系统会自动创建它的第一个线程,称为主线程。然后,该线程可以创建其他的线程,而这些线程又能创建更多的线程。
线程由两个部分组成:
一是操作系统用来管理线程的内核对象,内核对象也是系统用来存放线程统计信息的地方。另一个是线程的堆栈,它用于维护线程在执行代码时需要的所有函数参数和局部变量。

去看看Delphi附带的多线程例子吧,很简单也很经典。

1,594

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧