相关疑难解决方法(0)

绿色线程与非绿色线程

我想了解这些类型的线程提供的优势.

  • 在什么环境下绿色线程比非绿色更好?有人说绿色线程更适合多核处理器.

  • 任何预期的行为问题.

java multithreading terminology

68
推荐指数
5
解决办法
3万
查看次数

Java线程是在用户空间还是内核空间中创建的?

检查此代码

    Thread t1 = new Thread(new Runnable() {

        @Override
        public void run() 
        {
            try
            {
                System.out.println("STARTING SERVER...");
                ServerSocket s = new ServerSocket(2544);
                System.out.println("SERVER BLOCKED ON ACCEPT");
                Socket ss = s.accept();
                System.out.println("SERVER NOT BLOCKED ANYMORE");
            }
            catch(Exception ex)
            {
                ex.printStackTrace();
            }
        }
    });
    t1.start();



    Thread t2 = new Thread(new Runnable() {

        @Override
        public void run() 
        {
            try
            {
                while(true)
                {
                    Thread.sleep(1000);
                    System.out.println("Hello");
                }
            }
            catch(Exception ex)
            {
                ex.printStackTrace();
            }
        }
    });
    t2.start();
Run Code Online (Sandbox Code Playgroud)

输出:

STARTING SERVER...
SERVER BLOCKED ON ACCEPT
Hello
Hello …
Run Code Online (Sandbox Code Playgroud)

java multithreading kernel

8
推荐指数
2
解决办法
8842
查看次数

当用户级线程阻塞时,关于“对等线程”阻塞的困惑

我正在阅读线程和进程之间的差异,并且几乎在网上到处都是,一个差异通常没有太多解释:

如果一个进程被阻塞,剩余的进程可以继续执行。如果一个用户级线程被阻塞,它的所有对等线程也会被阻塞。

这对我没有任何意义。如果调度程序不能在阻塞线程和就绪/可运行线程之间切换,那么并发的意义是什么。给出的原因是,由于操作系统不区分给定父进程的各个线程,因此它会立即阻止所有线程。

我觉得这很不令人信服,因为所有现代操作系统都有带有线程 ID 的线程控制块,即使它仅在父进程的内存空间内有效。就像 Galvin 的《操作系统》一书中给出的示例一样,如果拼写检查线程无法连接到某个在线词典,我不希望正在处理我的打字的线程被阻塞。

要么我对这个概念的理解有误,要么所有这些网站多年来都只是复制了一些旧的线程差异。此外,我在书中找不到这种说法,例如 Galvin 的书或 William Stalling 的 COA 书,其中讨论了线程。

提前致谢。

编辑: 这些是我找到语句的资源:

java multithreading operating-system cpu-architecture green-threads

6
推荐指数
1
解决办法
195
查看次数

为什么绿色线程不能在多个核心上工作

在维基百科上:Green_threads被描述为通常不能在多核上运行而不解释原因.

在多核处理器上,本机线程实现可以自动将工作分配给多个处理器,而绿色线程实现通常不能.

我理解本机线程可以由OS分配给多核.有人可以解释为什么绿色线程不能在多核上运行吗?是因为绿色线程是从本机线程派生/生成的,它们无法从本机线程移动到另一个线程?

multithreading green-threads

5
推荐指数
2
解决办法
1343
查看次数