目录
2.用户态线程实现由于不能应对阻塞操作,有人认为其是没有任何用处的。你持何种看法?
到底是正常的人员优化,还是裁员,还是给社会输送人才,争论的意义不大。但有一点可以肯定,又有上千人待业这事是真的。
我在池大的莫问西东便签上看到这样一个数据,从 2022 年三月到 2023 年 3 月,阿里的员工数少了近 2 万人,从 254,941 名员工到 235,216,如果算上外包员工的话,这个数字可能就不止 2 万人了。
但到了 2022 年,拐点开始出现了。
请问你如何理解并发?
并发是指在一个系统中同时执行多个独立的任务或活动的能力。它是指两个或多个事件、任务、操作或进程在相同的时间段内进行或交替执行的特性。并发是一种处理多个任务的方式,通过将任务划分为多个子任务并同时执行,从而提高系统的吞吐量、响应性和资源利用率。
在计算机系统中,并发是通过操作系统的调度机制实现的。操作系统将任务划分为多个线程或进程,并通过分时调度的方式,让它们交替执行。每个线程或进程都拥有自己的执行上下文,包括程序计数器、寄存器状态和堆栈等。操作系统通过快速切换上下文的方式,在不同的时间片内轮流执行这些线程或进程,使得它们看起来是同时执行的。
并发的目的是提高系统的性能和效率。它允许多个任务同时进行,减少了等待时间和资源浪费,提高了系统的并行性和并发性。通过并发,可以实现实时响应、多用户支持、资源共享和任务并行处理等功能。
然而,并发也带来了一些挑战和问题,例如竞态条件(Race Condition)、死锁(Deadlock)、资源争用(Resource Contention)等。因此,实现有效的并发需要合理的并发控制和同步机制,以确保数据的一致性和正确性。
总而言之,通过并发,计算机系统能够同时执行多个独立的任务,提高系统性能和资源利用率。并发是操作系统中重要的概念,对于实现高效的任务处理和资源管理至关重要。
其实,我认为还是那个例子,就像你使用powerpoint,你输入是I/O操作,还移动鼠标,屏幕还要亮,这些看似都是同时的,可是如果你的电脑如果不是多核的,是单核的,那么你的电脑就是在执行并发工作,上面的各个工作,你可以看做是一个个线程,他们组合组合在一起,从而线程一个进程,也就是我们PowerPoint的执行环境。
也就是说,不能是我要i/o操作的时候,我的屏幕不亮;我要屏幕亮,我就不能输入,这样的话,我们的效率就大大降低了,我们要执行的就是这样的操作,这个是我目前理解的并发。
这里真的是讲的太好了,请务必看看,
一个C++程序如何调用调用函数cin的过程
程序进行系统调用也将造成从用户态进入到内核态的转换
此外,程序进行系统调用也将造成从用户态进入到内核态的转换。例如,一个C++程序调用函数cn,c是标准命名空间STD中的一个流对象,它调用C函数库里而的scanf()库函数,scaf()库函数则进一沙调用操作系统的READ函数来真正获取用户输入:这甲的READ函数实际上是由操作系统提供的一个系统调用(需要注意的是,很多高级语言的函数库里也包含名为READ的库函数,不过此READ非被READ)。
其执行过程如下:
1)执行汇编语言里面的系统调用指令(如syscall)。
2)将调用的参数SYSREAD、file number,size存放在指定的寄存器或栈上(事先约好),
3)当处理器执行到sysc指令时,察觉这是一个系统调用指令,将进行如下操作:
。设置处理器至内核态
·保存当前寄存器(钱指针、程序计数器、通用寄存器)。
。将找指针设置指向内核找地址。
•将程序计数器设置为一个事先约定的地址上,该地址上存放的是系统调用处理程序的起始地址
4)系统调用处理程序执行系统调用,并调用内核里面的READ函数,这样藏实现了从用户态到内核态的转换,并完成系统调用所要求的功能
的确如此,
线程的复杂程度的确会导致整个系统的不稳定
它和硬件的流水线结构一样令人讨厌,如此,我相信总有一天线程会被淘汰。
1.线程与进程的相似和不同之处何在?请予以详细论述。
相同之处,
线程作为进程的分身,他们有很多一样的资源和基础;
不同之处,
进程只能在内核态执行,但是线程是用户态和内核态都可以
线程更加的不稳定,增加了很多系统的不确定性
它们在内核态都有自己的控制表
相似之处:
- 资源和基础:线程和进程都是执行程序的基本单位,它们都有自己的程序计数器、寄存器状态和堆栈,以及访问共享内存和其他资源的能力。
- 并发执行:线程和进程都可以并发执行,允许多个任务同时进行,提高系统的性能和效率。
- 调度和切换:线程和进程都需要操作系统进行调度和切换,以使它们能够交替执行或并行执行。
不同之处:
- 执行环境:进程是一个独立的执行环境,拥有独立的地址空间和系统资源。而线程是在进程内部创建和执行的,共享相同的地址空间和系统资源,包括文件描述符、打开的文件等。
- 调度开销:由于线程共享进程的资源,线程的创建、切换和销毁的开销通常比进程小,因为不需要创建新的地址空间和资源表。
- 并发性:进程之间是相互独立的,每个进程有自己的执行状态和资源,相互之间不会影响。而线程共享相同的地址空间,它们之间的操作和状态改变可能会相互影响。
- 系统调用:进程可以执行系统调用,并在内核态执行。而线程可以在用户态和内核态之间进行切换,执行系统调用和用户态操作。
- 稳定性和不确定性:由于线程共享进程的资源,线程之间的操作和状态改变可能会引起竞争条件和不确定性。进程相对更稳定,因为它们有独立的资源。
总体而言,线程与进程在资源共享、执行环境、调度开销和并发性等方面存在差异。线程的创建和切换开销较小,但由于资源共享和竞争可能引起不确定性。而进程相对更稳定,每个进程都是独立的执行环境,但开销相对较大。因此,在设计和实现多任务系统时,需要根据具体需求和场景选择适当的线程和进程管理策略。
对于你给出的回答,我会打3分。
相同之处: 你正确指出了线程和进程共享资源和基础,包括程序计数器、寄存器状态和堆栈等。
不同之处: 你提到了进程只能在内核态执行,而线程可以在用户态和内核态执行,这是正确的。你还指出了线程的不稳定性和增加了系统的不确定性,这也是一种区别。然而,你的回答比较简洁,没有详细说明线程的不稳定性是如何体现的。你提到线程和进程在内核态都有自己的控制表,但这一说法并不准确,线程和进程都有自己的执行上下文,包括寄存器等状态。
综上所述,虽然你的回答涉及了线程和进程的一些不同之处,但是对于线程的不稳定性和不确定性的解释还可以更加详细和准确一些。因此,我会给出3分的评分。
2.用户态线程实现由于不能应对阻塞操作,有人认为其是没有任何用处的。你持何种看法?
3.调度器激活(scheduler activation)是一种良好的解决用户态线程问题的方案吗?它为什么没有得到商业应用?
4.一个进程里面的不同线程是否受到相互保护?为什么?
5.两个不同进程里面的线程是否受到相互保护?为什么?