多线程编程 :基础概念

线程与进程

线程定义

1. 线程是进程中的一个实体,是被系统独立调度和分派的基本单位。
2. 线程本身不拥有系统资源,只拥有一点儿在运行中必不可少的资源。
3. 但它可与同属一个进程的其它线程共享进程所拥有的所有资源。
4. 线程也有就绪、阻塞和运行三种基本状态。

引用异步

Linux进程状态解析

R (TASK_RUNNING):可执行状态。
        1.正在CPU上执行的进程 
        2.可执行可是还没有被调度执行的进程
        
    S (TASK_INTERRUPTIBLE):可中断的睡眠状态
        处于这个状态的进程由于等待某某事件的发生(好比等待socket链接、等待信号量),而被挂起。
        这些进程的task_struct结构被放入对应事件的等待队列中。
        当这些事件发生时(由外部中断触发、或由其余进程触发),对应的等待队列中的一个或多个进程将被唤醒
        
    D (TASK_UNINTERRUPTIBLE),不可中断的睡眠状态
        存在的意义就在于,内核的某些处理流程是不能被打断的。
        若是响应异步信号,程序的执行流程中就会被插入一段用于处理异步信号的流程
T (TASK_STOPPED or TASK_TRACED),暂停状态或跟踪状态
        向进程发送一个SIGSTOP信号,它就会因响应该信号而进入TASK_STOPPED状态。 
              
        当进程正在被跟踪时,它处于TASK_TRACED这个特殊的状态。
        “正在被跟踪”指的是进程暂停下来,等待跟踪它的进程对它进行操做。
        好比在gdb中对被跟踪的进程下一个断点,进程在断点处停下来的时候就处于TASK_TRACED状态。
        而在其余时候,被跟踪的进程仍是处于前面提到的那些状态。
        
    Z (TASK_DEAD - EXIT_ZOMBIE),退出状态,进程成为僵尸进程
        进程在退出的过程当中,处于TASK_DEAD状态。
        在这个退出过程当中,进程占有的全部资源将被回收,除了task_struct结构(以及少数资源)之外。
        因而进程就只剩下task_struct这么个空壳,故称为僵尸。
        之因此保留task_struct,是由于task_struct里面保存了进程的退出码、以及一些统计信息。
        而其父进程极可能会关心这些信息。
    X (TASK_DEAD - EXIT_DEAD),退出状态,进程即将被销毁。
相关文章
相关标签/搜索