• 论进程和线程的区别


         最近找工作时候,被问到进程和线程的区别,我只是简单的解释了下线程可以访问进程的资源,而且中途把进程组的概念和线程搞混了。后面回过头去看了看linux上的线程的用法,发现之前有很多误解。因此再回过头看看。

        1. 进程是操作系统层面管理任务的基本单位,线程是包含在进程内去运行,不能单独跑。

            我们很多时候用不到多线程,而main函数里面串行跑的这一部分当做是主线程。

        2. 操作系统分配资源是按进程去分配,而不是线程

        3. 进程可以包含多个线程,这些线程之间是同步执行,在一些资源上存在互斥,而且线程中可以创建其他线程

        4. 线程共享了它所在的进程的资源,这块从代码上也可以看出来

        linux上的线程,有一个pthread库,我在网上找了一个用法,看了示例代码后,明白了很多。

    #include <stdio.h> // printf
    #include <pthread.h> // pthread_create
    #include <stdlib.h> // exit
    #include <unistd.h> // usleep

    void * thread( void * par){
      int i;
      for( i = 0; i < 30; i ++){
       printf( "This is a pthread. ");
       usleep( 1000);
      }
      return 0;
    }

    int main(void){
      pthread_t id;
      int i,ret;
      ret = pthread_create( &id, NULL, thread, NULL);
      if( ret != 0){
       printf( "Create pthread error! ");
       exit( 1);
      }
      for( i = 0; i < 30; i ++){
       printf( "This is the main process. ");
       usleep( 330);
      }
      pthread_join( id, NULL);
      return( 0);
    }

        对于main函数而言,如果没有生成其他线程,代码是串行跑的,可以认为是主线程,而使用了pthread_create函数,生成一个新起的线程。这个新起的线程,和主线程,在运行时候都被包含在同一个进程里面,从进程外面看,这个进程用到的资源自然是内部线程大家共有的。而且,我们也可以看到,单从代码级别来看,pthread_create创建出来的线程,因为代码作用域,他其实是可以访问main函数里面的变量,或者main函数外层(全局)的变量的。所以这也是说线程能访问进程资源。

  • 相关阅读:
    shell 使用Seq算出1-100的奇数之和
    Shell脚本判断是否是闰年
    shell脚本之使用bc工具实现数值转换(浮点转二进制)
    shell脚本之函数的参数
    shell脚本之while
    大数据JAVA基础第十六天
    大数据JAVA基础第十五天
    大数据JAVA基础第十四天
    大数据JAVA基础第十三天
    大数据JAVA基础第十二天
  • 原文地址:https://www.cnblogs.com/leipei2352/p/12545214.html
Copyright © 2020-2023  润新知