问题标签 [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.
python - Stackless Python - 分析单个 tasklet 执行时间
在我用 Stackless Python 编写的服务器中,我偶尔会在 5-10 秒的时间内出现 CPU 使用率的大幅峰值。这种情况偶尔发生,所以我无法追踪它。
我已经使用 cProfile 来尝试确定这些尖峰的来源,但 cProfile 给出了每个函数花费时间的总体情况。我真正想知道的是 CPU 峰值是否是由于单个小任务中发生的某些处理(并停止其他小任务),或者是否有多个小任务进行大量处理(即,当每个小任务变得活跃时,每个小任务都在做很多工作)。
有没有一种方便的方法可以连接到 Stackless Python 中的调度程序,以便我可以添加一些计时代码?换句话说,是否有一个函数可以在 tasklet 变为活动状态以及当它变为非活动状态时调用,我可以挂钩?
java - 为什么 Java 中的用户级线程被称为“绿色”?
可能重复:
绿色线程与非绿色线程
为什么在 JVM 中实现用户级别的 Java 线程称为“绿色线程”?是类比环保主义,意思是暗示它们比操作系统线程更不浪费,还是别的什么?
编辑:对该术语的使用位置的一些参考:
python - 在单个 python 进程中混合绿色线程和本机线程是否安全?
首先,将eventlet或gevent等绿色线程与标准库中的python原生线程(即Lib/threading.py)混合在同一个python进程中是否安全?
其次,如果它是安全的,这是一个坏主意吗?
python - 阻止greenlets有问题吗?
我理解阻塞代码对于事件循环(即 NodeJS)是一种罪过,但是对于 greenlets(我认为是绿色线程)呢?运行调用阻塞函数的代码是否存在问题?
java - Java 绿色线程通过 JNI 使用 UNIX ucontext 库。可能吗?
我正在使用 ucontext 开发一个基于绿色(合作)量子线程的简单的教育示例。但我面临着问题。下面提供的示例非常容易理解,我将感谢您为我提供的任何帮助:
TestApp.java
:
UThreadApp.java
:
UThreadApp.c
:
代码创建kernel
和main
上下文并准备umain
方法作为新的用户线程。swap
切换上下文,保存内核并运行 main。示例应打印:
主
接下来
主要的
但是在执行 Java 回调时会出现段错误(*env)->CallStaticVoidMethod(env, cls, mid)
。这种代码很容易用 C 语言编写,但我在尝试用 Java 开发它时遇到了一些微妙的问题。
Apachejavaflow
不是一个选项,因为我发现开发具有时间量子的调度程序非常困难(使用 SIGALRM)。
有什么想法吗?
python - Python中的绿色线程和线程
正如维基百科所说:
绿色线程在不依赖任何本机操作系统功能的情况下模拟多线程环境,并且它们在用户空间而不是内核空间中进行管理,使它们能够在没有本机线程支持的环境中工作。
Python 的线程被实现为pthreads (kernel threads)
,并且由于全局解释器锁 (GIL),Python 进程一次只运行一个线程。
[问题]但是在Green-threads
(或所谓的greenlet或tasklets)的情况下,
GIL
对他们有影响吗?一次可以运行多个greenlet吗?- 使用greenlets或tasklet有什么陷阱?
- 如果我使用greenlets,一个进程可以处理多少个?(我想知道,因为在单个进程中,您最多可以打开 *ix 系统中设置的ulimit(-s,-v)线程。)
我需要一点洞察力,如果有人能分享他们的经验,或者引导我走上正确的道路,那将会有所帮助。
python - 使用 eventlet.GreenPool.spawn 时如何在主线程中引发异常
我使用 eventlet.GreenPool.spawn 运行一些任务,然后等待所有线程完成。我知道会引发异常 - 我如何捕获该异常并将其抛出到主线程中?我很确定这很容易,但是我完全错过了一些东西。
这是一个例子(失败了,我希望它成功)
它的输出:
python - `eventlet.spawn` 没有按预期工作
我正在为数据分析任务编写一个 Web UI。
这是它应该工作的方式:
在用户指定和 等参数后dataset
,learning rate
我创建一个新的task record
,然后异步启动此任务的执行程序(执行程序可能需要很长时间才能运行。),并将用户重定向到其他页面。
搜索后async library for python
,我从 开始eventlet
,这是我在flask
视图函数中写的:
使用上面的代码,执行程序根本没有执行。
我的代码可能有什么问题?或者也许我应该尝试别的?
pthreads - 如何将同步阻塞共享内存模型代码转换为在线程池上运行的异步协程?
虽然有很多解决方案部分匹配我的问题,但我想知道是否存在完全匹配。由于这些部分占据了搜索结果,因此很难找到完整的解决方案。当语言不支持协程时,这应该是一个运行时框架和(可选)源语言代码所需的转换。
有像 lthread 这样的库具有 lthread_cond_wait() API,但每个 lthread 都由单个 pthread 限制。我希望轻量级线程能够在多个 pthread 中运行。它们应该由线程池任意选择。单线程调度程序或全局锁调度程序不匹配。我认为我们可以做得更好。
lthreads 也不是一个选项,因为它既不涉及源代码转换,也不像 protothreads 那样避免它。
几个绿色线程运行时(Erlang、Limbo)不匹配,因为它们仅限于 CSP(通信顺序进程)模型,但我也希望共享内存模型同步原语:互斥锁、条件变量、rwlocks。
转型包括:
- 将堆栈上下文转换为堆中的对象
- 将互斥调用转换为在线程池和发布-订阅上操作禁用和激活作业
- 条件变量也应该转换为发布-订阅关系
- 有艾达式的约会会很好
由于发布-订阅机制中的潜在死锁而没有使用全局锁或单个调度程序线程,我未能进行直接的运行时实现,但我仍然认为这是可能的。