进程和线程之间的技术差异是什么?
我感觉像'过程'这样的词被过度使用,还有硬件和软件线程.如Erlang这样的语言轻量级进程怎么样?是否有明确的理由使用一个术语而不是另一个术语?
最近,我在面试中被问到一个问题,即流程和线程之间的区别.真的,我不知道答案.我想了一会儿,给了一个非常奇怪的答案.
线程共享相同的内存,而进程则没有.在回答这个问题之后,面试官给了我一个邪恶的微笑,并向我解释了以下问题:
问:你知道程序划分的部分吗?
我的回答:是的(认为这是一个简单的)堆栈,数据,代码,堆
问:那么,告诉我:线程共享哪些段?
我无法回答这个问题并最终说出了所有这些.
请问,任何人都可以为流程和线程之间的差异提供正确和令人印象深刻的答案吗?
什么是线程的最佳定义以及什么是进程?如果我调用一个函数,我怎么知道一个线程正在调用它或一个进程(或者我不理解它?).这是一个多核系统(四核).
一位教授曾在课堂上告诉我们,Windows,Linux,OS X和UNIX可以在线程而不是进程上扩展,因此即使在单个处理器上,线程也可能使您的应用程序受益,因为您的应用程序将在CPU上获得更多时间.
我尝试在我的机器上使用以下代码(只有一个CPU).
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
pthread_t xs[10];
void *nop(void *ptr) {
unsigned long n = 1UL << 30UL;
while(n--);
return NULL;
}
void test_one() {
size_t len = (sizeof xs) / (sizeof *xs);
while(len--)
if(pthread_create(xs+len, NULL, nop, NULL))
exit(EXIT_FAILURE);
len = (sizeof xs) / (sizeof *xs);
while(len--)
if(pthread_join(xs[len], NULL))
exit(EXIT_FAILURE);
}
void test_two() {
size_t len = (sizeof xs) / (sizeof *xs);
while(len--) nop(NULL);
}
int main(int argc, char *argv[]) {
test_one();
// test_two();
printf("done\n");
return …Run Code Online (Sandbox Code Playgroud)