问题标签 [green-threads]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
294 浏览

green-threads - 绿色线程与简单循环的好处

green threads / lightweight threads假设仅在两者中使用非阻塞操作,使用简单循环或顺序代码有什么好处吗?

据我所知
- 绿色线程有助于避免异步操作上的一些回调地狱
- 允许在 N 个内核线程上调度 M 个绿色线程

但是
- 增加了一些需要调度程序的复杂性和性能
- 当语言支持它并且执行被拆分到不同的 cpu 时更容易跨线程通信(否则顺序代码更简单)

0 投票
2 回答
372 浏览

python - 在 Python 中生成后休眠

我想在 Python 中每 1 秒启动 4 个线程来做一些工作。为了确保工作每 1 秒完成一次,我在生成后插入了一个睡眠,如下面的代码片段所示。从打印来看,执行次数似乎do_work是 10,而我期望 10*4 --> 循环迭代次数 x 线程数。此外,似乎第一个线程在主循环中打印的时间后 4 秒后开始工作。(我也在线程内打印了时间)。

0 投票
2 回答
3965 浏览

.net - .NET 中的绿色线程

绿色线程是在 Erlang 中引入的,可能所有基于它的语言都知道它们,在 go (gorutines) 中也是如此。然后 afaik 他们被从生锈中移除。

我的问题:

  • 如何在 .NET 中实现绿色线程?是否有一些警告会阻止当前的 .NET 运行时实现它们?
  • 它甚至在性能方面有意义吗?我们有一个非常轻量级的任务,并且在(不久的)将来我们甚至会有 ValueType 任务(更适合某些场景)......
0 投票
2 回答
7520 浏览

python - 如何为异步 gunicorn 工作者使用 eventlet 库

我的 django 项目之一是使用ansible (gunicorn & nginx)部署的。下面是gunicorn配置:

工作进程同步运行。我希望它们同时运行,因为我在这台服务器上每分钟有很多请求。在研究中,我发现我可以使用 python 库,比如eventlet使用greenthreads进行并发。为此,我需要将 worker_class 更改为 eventlet:

但现在我一无所知。我不知道如何为这个项目实现异步绿色线程。可能这是一个愚蠢的问题,但我真的需要一些帮助。

提前致谢。

0 投票
1 回答
318 浏览

multithreading - 绿色线程中的 I/O 阻塞

我正在阅读有关绿色线程的内容,并且能够理解这些线程是由 VM 或在运行时而不是由操作系统创建的,但我无法理解以下语句

当绿色线程执行阻塞系统调用时,不仅该线程被阻塞,而且进程内的所有线程都被阻塞。

谁能解释一下这怎么可能?

0 投票
0 回答
173 浏览

multithreading - 绿色线程 vs 本机线程 vs 守护线程 vs 用户线程

所有这些类型的区别有什么区别?我能够找到前两个和后两个之间的差异,但不是全部。您能否通过示例提供有关这些类型的详细信息。除了这些线程,我们有不同类型的线程吗?

0 投票
1 回答
80 浏览

linux-kernel - 绿色线程的缺点:宿主内核线程块

我目前正在学习操作系统,我很难理解有关Implementing Multi-Threaded Processes.

具体来说,教科书解释说,我们可以通过名为Per-Processor Kernel Threads. 该系统的详细说明如下:

当应用程序启动时,用户级线程库为主机上的每个处理器创建一个内核线程。只要系统上没有其他活动,内核就会为这些线程中的每一个分配一个处理器。每个内核线程并行执行用户级调度程序:将下一个线程从用户级就绪列表中拉出,并运行它。因为线程调度决策发生在用户级别,它们可以是灵活的和特定于应用程序的。

但是,接下来也提到了这个系统有一些缺点,类似于绿线。下面提到的一些缺点

  • 任何时候用户级线程调用内核,它的宿主内核线程都会阻塞。这可以防止线程库同时在该处理器上运行不同的用户级线程。

  • 每当内核对内核线程进行时间切片时,它正在运行的用户级线程也会被挂起。在内核线程恢复之前,该库无法恢复该线程。

我不能完全理解他们两个。这是我的问题。

  1. 如果一个用户级线程调用内核,为什么宿主内核线程会阻塞在这个系统中?
  2. 是什么kernel time-slices a kernel thread意思?
  3. 如果内核对内核线程进行时间切片,为什么用户级线程运行被挂起?

谢谢。

0 投票
1 回答
57 浏览

multithreading - 主线程上下文在不同的硬件线程中返回,未定义的行为?

我目前正在开发一个带有绿色线程的 C++ 并发库,它使用工作窃取来实现多个硬件线程上的调度程序之间的负载平衡。

我已将主上下文固定到其硬件线程,这意味着它不能被盗,因此无法迁移到其他硬件线程。

我相信我已经在某处读到过这篇文章,如果主上下文被盗并在不同的硬件线程中返回(退出)来自它的起源是未定义的行为。但是,我现在似乎找不到任何来源。

这是未定义的行为吗?引用来源将是完美的。

0 投票
2 回答
429 浏览

erlang - erlang如何实现一个OS线程的抢占式调度?

我想知道 erlang 的 VM 是如何抢占正在运行的代码和上下文堆栈的。如何用 c 之类的语言完成它?

0 投票
1 回答
466 浏览

python - gevent pool wait_available 线程安全吗

所以我有一个函数可以说是大小为 10 的测试和 gevent 池。

如果函数测试由不同的线程调用,是否会导致任何问题。我的意思是wait_available应该是线程安全的,但pool.spawn它会有线程安全/竞争条件问题。我的意思是说已经有 9 个 greenlets 正在运行,并且有几个请求调用了测试函数。他们俩都将读取 pool.wait_available ,它不应该阻塞但是之后的 pool.spawn 将使他们中的一个阻塞。

我只想确保pool.spawn不会阻塞超过指定的超时期限。我怎样才能做到这一点?