关于线程和进程的问题

时间:2011-04-30 14:46:34

标签: java multithreading

我阅读了一些关于线程和进程的教程,据说这些进程是由操作系统内核调度的,并且可以在用户模式下管理和调度线程。

我不明白这句话“可以在用户模式下管理和安排线程”, 例如:生产者和消费者问题?这是“以用户模式安排”的示例吗?还是有人可以解释一下吗?

3 个答案:

答案 0 :(得分:4)

不确定您正在查看哪个教程,但有两种方法可以安排线程。

第一个是用户模式调度,这基本上意味着使用Green threads或者fibers的一个进程安排不同的线程运行而不涉及操作系统的决策。这在操作系统中可以更容易移植,但通常不允许您利用多个处理器。

第二个是内核调度,这意味着各个线程对内核可见并由它调度,可能同时在不同的处理器上调度。但是,这可能会使线程创建和调度更加昂贵。

所以它并不真正取决于您要解决的问题。 User-mode只意味着线程的调度在不涉及操作系统的情况下发生。一些早期的Java版本使用了绿色/用户模式线程,但我相信现在大多数都使用本机/内核线程。

编辑: Coding Horror在用户和内核模式之间存在a nice overview的差异。

答案 1 :(得分:1)

获得更好的教程?官方Java教程非常好,包含lesson on concurrencydefines 进程线程意味着什么。

PS:线程是否以用户模式进行管理/调度是Java虚拟机的实现细节,通常不需要与应用程序员有关。

答案 2 :(得分:1)

在用户模式下计划意味着您可以控制软件的线程,但它们由操作系统内核管理。所以是的,生产者消费者问题是你通常自己处理的一个例子(但它与用户模式调度没有直接关系),有两个线程,一个生产者线程和一个消费者线程。两个线程都访问相同的共享资源。此资源必须是线程安全的,这意味着您必须确保共享资源不会被损坏,因为两个线程同时访问它。通过使用线程安全数据类型或手动锁定或同步资源,可以保证线程安全。

但是,即使您对线程有一些控制权,例如启动线程,停止线程,让线程睡眠等你没有完全控制。操作系统仍在管理哪些线程允许cpu时间等。