zoukankan      html  css  js  c++  java
  • 论进程和线程的区别

         最近找工作时候,被问到进程和线程的区别,我只是简单的解释了下线程可以访问进程的资源,而且中途把进程组的概念和线程搞混了。后面回过头去看了看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函数外层(全局)的变量的。所以这也是说线程能访问进程资源。

  • 相关阅读:
    Asp.net Core 系列之--5.认证、授权与自定义权限的实现
    Asp.net Core 系列之--4.事务、日志及错误处理
    Asp.net Core 系列之--3.领域、仓储、服务简单实现
    Asp.net Core 系列之--2.ORM初探:Dapper实现MySql数据库各类操作
    Asp.net Core 系列之--1.事件驱动初探:简单事件总线实现(SimpleEventBus)
    Cocos2d-x项目创建
    Cocos2d-x编译Android环境
    Linux 之 RPM
    Channels实现扫码登录
    SQLALchemy中关于复杂关系表模型的映射处理
  • 原文地址:https://www.cnblogs.com/leipei2352/p/12545214.html
Copyright © 2011-2022 走看看