作者in2 (敬请期待 :P)
看板CSSE
标题Re: thread (执行绪) definition??
时间Tue Jan 24 00:53:10 2006
※ 引述《cipherman (雨云无日晴)》之铭言:
: ※ 引述《tcmbug (bug)》之铭言:
: : 初次接触到 multithread 的paper,但是对於里面提到的thread
: : 不是很了解,之前得到一位学长的答案是:"一个process正在被处理的一段code"
: : 想请问有没有更明确的定义,比如说,一个程式如何区分出thread??
: Thread和Process的差别可以用个具体的譬喻来说...
: 就是像pcman和firefox那样...每个分页都是一个thread...
: 若是要开一个新页就要另外开一个新的视窗就是新开一个process...
: 所以说,thread和process主要的差别在要执行的动作一样...
: thread则不再另外allocate一个space放要执行的code....
这样子的说法其实会有争议,
因为 copy on write的技术 (我猜应该许多作业系统都有做了) ,
一个 process进行 fork(2)的时候,
当下 code (以及其他大部份的东西) 并不会被弄成两份,
而 code space 在大部份的情况下又是 read only的,
所以理论上不管你 fork 几次都还是会只有一份.
我倒比较好奇的是,
如果我故意跑两只一样的程式,
而不是先跑一只起来再让他 fork,
酱子在记忆体中, code会变两份吗? 或是只有一份?
个人猜测应该是前者比较合理,
後者的话似乎有点实作上的困难 @@
要怎麽知道新跑起来的这个程式是不是和其中一个已经在跑的程式一样呢? :Q
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.112.90.74
1F:推 hardcover:open file table + shared page 应该可以。猜的 XD 01/24 01:29
2F:推 UNARYvvv:如果在 Windows 上,透过 file mapping 应该是一份吧 01/24 02:16
3F:→ UNARYvvv:就像 DLL 一样 01/24 02:17
4F:→ UNARYvvv:而一般 process 的 code space 内容也是把 EXE 档内容利 01/24 02:17
5F:→ UNARYvvv:用 file mapping 方式对应到 process address space 中 01/24 02:19
6F:→ UNARYvvv:所以应该是共用的状态 01/24 02:19
7F:→ UNARYvvv:反正改了还是有 copy on write 不会影响到其他 process 01/24 02:20
8F:推 HZYSoft:Windows 上是一份 01/24 07:58
9F:→ HZYSoft:Win32 code 是一份 data 则是很多份 (我猜应该也有 COW) 01/24 07:58
10F:推 cipherman:其实我猜想是"早期"才有这些分别吧.... 01/24 19:39
11F:→ cipherman:就是thread的概念刚提出时,为和传统process做区别 01/24 19:39
12F:→ cipherman:而现在可能就没有很大的区别了... 01/24 19:40
13F:推 edwar:如果不同 user 跑同一个程式也是一份吗? 01/24 22:16
14F:推 jeunder:最简单的分法, thread 之间共享 memory context... 01/24 22:27
15F:→ jeunder:process 之间则是独立空间, 因此必须利用 share memory 01/24 22:29
16F:→ jeunder:才能分享资料... (不知道这样的定义是不是已经过时了 @,@? 01/24 22:30
17F:推 gwliao:memory context? Address space会不会比较好一点. 01/25 02:24
18F:推 Tiberius:address space 没有涵盖到 protection 之类的概念吧 01/25 12:11
19F:推 gwliao:没有protection就没办法区分thread和process的差别吗? 01/25 12:40