去自如面试问到的进程相关的问题,问了一些基本的问题,跟之前node一样也是一知半解,一脸懵逼,回来总结一下。
1. 进程、线程、协程、goroutine
写的程序是代码,是静态的,只有执行起来才有进程。所以
进程就是计算机中的程序关于某些数据集合的一次运行活动,是系统进行资源分配和调度的基本单位。进程是程序的基本执行实体,占有独立的运行空间。
一个进程可以有多个线程,线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。
进程和线程的关系:
(1)一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程。
(2)资源分配给进程,同一进程的所有线程共享该进程的所有资源。
(3)CPU分给线程,即真正在CPU上运行的是线程。
协程,是比线程更轻量级的,本质上说用户态下的线程,需要用户自己来控制资源的释放而不是由系统来控制。由于需要程序自己来控制,他是非抢占式的。
goroutine是go中最基本的执行单位,每一个go程序至少有一个goroutine, 主goroutine。
2. go中make和new的区别
一是参数不同,new的参数只有一个,类型,make的参数有多个,第一个为类型,第二个为长度,slice第三个参数表示容量
二是针对的类型不同,new就比较简单了,随便一个类型都行
三是返回值不同,new返回的是类型的指针,make返回的就是类型。