最近找工作时候,被问到进程和线程的区别,我只是简单的解释了下线程可以访问进程的资源,而且中途把进程组的概念和线程搞混了。后面回过头去看了看linux上的线程的用法,发现之前有很多误解。因此再回过头看看。
1. 进程是操作系统层面管理任务的基本单位,线程是包含在进程内去运行,不能单独跑。
我们很多时候用不到多线程,而main函数里面串行跑的这一部分当做是主线程。
2. 操作系统分配资源是按进程去分配,而不是线程
3. 进程可以包含多个线程,这些线程之间是同步执行,在一些资源上存在互斥,而且线程中可以创建其他线程
4. 线程共享了它所在的进程的资源,这块从代码上也可以看出来
linux上的线程,有一个pthread库,我在网上找了一个用法,看了示例代码后,明白了很多。
#include <stdio.h> // printf
#include <pthread.h> // pthread_create
#include <stdlib.h> // exit
#include <unistd.h> // usleepvoid * thread( void * par){
int i;
for( i = 0; i < 30; i ++){
printf( "This is a pthread.\n");
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!\n");
exit( 1);
}
for( i = 0; i < 30; i ++){
printf( "This is the main process.\n");
usleep( 330);
}
pthread_join( id, NULL);
return( 0);
}
对于main函数而言,如果没有生成其他线程,代码是串行跑的,可以认为是主线程,而使用了pthread_create函数,生成一个新起的线程。这个新起的线程,和主线程,在运行时候都被包含在同一个进程里面,从进程外面看,这个进程用到的资源自然是内部线程大家共有的。而且,我们也可以看到,单从代码级别来看,pthread_create创建出来的线程,因为代码作用域,他其实是可以访问main函数里面的变量,或者main函数外层(全局)的变量的。所以这也是说线程能访问进程资源。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步