问题标签 [user-thread]

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 投票
4 回答
8640 浏览

c - 有什么东西可以代替职能?

不推荐使用中的用户线程函数,<ucontext.h>因为它们使用了不推荐使用的 C 功能(它们使用带有空括号的函数声明作为参数)。

他们有标准的替代品吗?我不觉得成熟的线程擅长实现协作线程。

0 投票
3 回答
867 浏览

multithreading - 什么是用户线程?

什么是用户线程?下面的解释说它们是由用户空间管理的......请解释一下如何?

线程有时在用户空间库中实现,因此称为用户线程。内核不知道它们,因此它们在用户空间中进行管理和调度。

0 投票
1 回答
173 浏览

pthreads - 关于使用 pthreads 库请求 I/O 的用户线程

假设没有对线程的内核级支持。一个进程有 10 个线程在运行,其中一个线程请求 I/O。

pread 库是立即向内核声明 I/O 请求还是开始在其就绪队列中执行线程?

(如果它声明它是 I/O 请求,那么它将被 CPU 抢占,从而使多线程对 I/O 密集型任务无用)。

0 投票
1 回答
100 浏览

synchronization - 在用户线程中实现互斥等待

用户线程中的等待锁是如何实现的?

假设线程A正在尝试获取另一个线程B使用的锁。A意识到锁被其他线程锁定后,他究竟做了什么?它如何停止自己的执行?他停下来后谁跑?

我在内核线程中读到,线程可以调用一个系统调用来挂起它并将其放入等待队列中。但是在用户线程中,系统不知道线程,所以应该有一个由用户管理的队列吗?

0 投票
0 回答
471 浏览

multithreading - Characteristics of user-level threads

I'm studying for an upcoming operating systems exam, and I've come across this question and would like some clarification because honestly I am not too confident on my answers.

Here are my thoughts...

  1. False, because kernel threads can do this and I believe its one of the drawbacks of user level

  2. True, because the OS can't distinguish multiple user-level threads so something is needed to route them? (Not sure on this)

  3. True, just a guess but because it's not OS level then it can run on many systems despite the OS

  4. False, I think user-level threads are meant to be fast and low overhead.

Can anyone confirm my assumptions, or if I am wrong guide me in the right thought process?

0 投票
1 回答
5082 浏览

c - __llll_lock_wait_private() 使用 malloc/free 时

我有一个用户级线程库,我更改了一个基准程序以使用 mythreads 而不是 pthreads,但它总是卡在有 malloc 或 free 函数的代码中。

这是 gdb 的输出:

这是一些代码

暂停和恢复功能

我不确定它是否与我的问题有关,但对于线程调度,我使用 SIGPROF 信号和处理函数。我尝试在每个 malloc/free 函数之前阻止 SIGPROF,但它没有效果。

我没有任何并发​​线程,一次只运行一个线程。

任何帮助或想法将不胜感激。

0 投票
1 回答
1397 浏览

c - mac OSX 上使用 ucontext 和信号的用户线程调度 API

我正在设计一种具有以下特性的调度算法:

  • 在一个进程中有 2 个用户线程(上下文)(我应该做 3 个线程,但在 osx 上还不行,所以我决定现在让 2 个工作)
  • 使用每 1 秒关闭一次的 SIGALRM 信号进行抢先,并将控制从一个上下文更改为另一个,并保存在执行切换之前正在运行的上下文的当前状态(寄存器和当前位置)。

我注意到以下内容:

  • ucontext.h 库在 mac osx 上的行为很奇怪,而当它在 Linux 中应用时,它的行为完全符合它的预期(来自此 man 链接的示例:http: //man7.org/linux/man-pages/man3/makecontext .3.html像在 linux 上应该的那样完美地工作,而在 mac 上,它在进行任何交换之前因分段错误而失败)。不幸的是,我必须让它在 osx 而不是 linux 上运行。
  • 我设法通过使用 getcontext() & 然后 setcontext() 来交换上下文来解决 osx 上的 swapcontext 错误。
  • 在我的信号处理函数中,我使用了 sa_sigaction( int sig, siginfo_t *s, void * cntxt ),因为第三个变量曾经将它重新转换为 ucontext_t 指针,是关于被中断的上下文的信息(这在 Linux 上是正确的)一旦我测试过它)但在mac上它没有指向正确的位置,因为当我使用它时我再次遇到分段错误。

我已经为每个上下文设计了我的测试函数,使其在 while 循环中循环,因为我想中断它们并确保它们返回到该函数中的正确位置执行。我已经定义了一个静态全局计数变量,它可以帮助我查看我是否在正确的用户线程中。

最后一点是,我发现在测试函数中调用 getcontext() 在我的 while 循环中会不断更新我当前上下文的位置,因为它是空的 while 循环,因此当该上下文的时间到来时调用 setcontext()从适当的地方执行。此解决方案是多余的,因为这些功能将从 API 外部提供。

  • 我在这里做错了什么?我必须稍微改变一下才能在 Linux 上正确运行它并在 OSX 上运行适用于 Linux 的版本会导致分段错误,但为什么它会在该操作系统上运行而不是这个?
  • 这是否与我在每个上下文中分配的堆栈大小有关?
  • 我应该为我的信号分配一个堆栈空间吗?(它说如果我不这样做,那么它使用默认堆栈,如果我这样做并没有真正的区别)?
  • 如果使用 ucontext 永远不会在 mac osx 上给出可预测的行为,那么在 osx 上实现用户线程的替代方案是什么?我尝试使用 tmrjump 和 longjmp 但我遇到了同样的问题,即当上下文在执行某个函数的过程中被中断时,我如何才能获得该上下文被中断的确切位置以便继续我下一次中断的地方时间?
0 投票
1 回答
42 浏览

linux - 哪种类型的线程更适合计算密集型并行应用程序和 I/O 密集型并行应用程序?

内核级别的多线程意味着多个进程可以同时在不同的线程上执行。

用户级线程驻留在不共享相同地址空间的进程中。

那么,哪种类型的线程更适合计算密集型并行应用程序和 I/O 密集型并行应用程序?

0 投票
2 回答
17 浏览

operating-system - 用户线程和内核线程应该选择哪一个

对于一个程序,我只使用用户线程或内核线程。我应该选择哪一个?