线程有自己的践,是分配CPU的单位

解决方案 »

  1.   

       要说明线程,首先要从其父亲大人—进程说起。
       当系统启动一个程序时,首先建立一个进程,然后分配4G的地址空间,将程序所需的一切资源,包括代码调入内存,然后用一个数据结构PDB管理此进程。PDB中一个域记录所属线程,进程可以启动线程,然后记录在域中,系统通过线程实现对进程所管理资源的控制,其中windows的消息队列就在线程一级。
      

  2.   

    补充:进程是描述了对系统资源的拥有权,线程则是执行其拥有权,两者之间的关系类似董事长和总经理的关系。此外,系统管理线程的结构是TDB,其中最重要的也就是消息队列了.
      

  3.   

    to zxcstudy
    PDB中记录线程的域是一个TDB链表的指针吗?系统调度的时候就是通过这个域来控制线程的吗?还有一个问题,进程的堆、栈与下属线程的堆、栈是一个什么样的关系,堆是共有的,栈是每个线程都有一个吗?因为如果线程是系统分配cpu的单位的话,应该有私有的栈吧。C runtime 函数创建的线程也有消息队列吗?
      

  4.   

    进程的所有子线程共享其内存空间,每个线程有自己独立的栈,用来存储局部变量,线程也可以局部存储,PCB中有指向线程的指针,从而可以调用线程
      

  5.   

    是开一个线程下建一个到几个socket
    还是一个socket下建一个到几个线程初级问题,还亲指教!
      

  6.   

    为了处理并发连接的话,一般是针对一socket建一个工作者线程。
      

  7.   

    那么Windows系统能达到多少个并发连接,多少个长连接,是不是都采用一个socket建一个线程
      

  8.   

    并发量很大的话,用异步socket更好,不用一个socket一个线程。
      

  9.   

    线程没有PCB,但有TCB。线程有自己的栈、寄存器,线程还可以有自己的消息队列。
    一个“TCB”中的典型内容有:CONTEXT(cpu状态)、返回值、Execption Handlers、消息队列、优先级、TLS slots等内容,但像Kernel Handle Table这样的内容只有PCB有,也就是说,Kernel“句柄”是按进程维护的,而不是按线程。
    无论用C RTL还是API创建的线程,只要是运行在WIndows环境下,就是Windows线程,就都有相同的TCB结构,因此都可以有消息队列。只是缺省情况下,WIndows不会为每个线程都创建消息队列,只有线程“需要”时(例如调用了CreateWindow或PeekMessage),Windows才会为它创建一个。
    但是线程没有Address Space,所有线程共享Process的Address Space,这就是为什么线程间能通过全局变量实现共享;同时线程又有自己的栈,这就是为什么线程的局部变量能够互不干扰。
      

  10.   

    to threads:
    异步socket是什么意思,如何使用?
    不用一个socket一个线程:是不是多个socket共用一个线程,如果这样的话,如何协调线程内的各socket?