- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
来自Operating System Concepts作者:Abraham Silberschatz、Greg Gagne 和 Peter Baer Galvin,以下是用户线程与内核线程的讨论:
support for threads may be provided either at the user level, for userthreads, or by the kernel, for kernel threads.
User threads aresupported above the kernel and are managed without kernel support,
kernel threads are supported and managed directly by theoperating system. Virtually all contemporary operatingsystems—including Windows, Linux, Mac OS X, and Solaris— supportkernel threads.
Ultimately, a relationship must exist between user threads and kernelthreads. In this section, we look at three common ways of establishingsuch a relationship: the many-to-one model, the one-to-one model, andthe many-to- many model.
这里是关于创建和管理线程的用户级库与内核级库的讨论:
A thread library provides the programmer with an API for creating andmanaging threads. There are two primary ways of implementing a threadlibrary.
The first approach is to provide a library entirely in user space with no kernel support. All code and data structures for the libraryexist in user space. This means that invoking a function in thelibrary results in a local function call in user space and not asystem call.
The second approach is to implement a kernel-level library supported directly by the operating system. In this case, code and datastructures for the library exist in kernel space. Invoking a functionin the API for the library typically results in a system call to thekernel.
Three main thread libraries are in use today: POSIX Pthreads, Windows,and Java. Pthreads, the threads extension of the POSIX standard, maybe provided as either a user-level or a kernel-level library. TheWindows thread library is a kernel-level library available on Windowssystems. The Java thread API allows threads to be created and manageddirectly in Java programs. However, because in most instances the JVMis running on top of a host operating system, the Java thread API isgenerally implemented using a thread library available on the hostsystem. This means that on Windows systems, Java threads are typicallyimplemented using the Windows API; UNIX and Linux systems often usePthreads.
用户线程和内核线程是否与线程级库和内核级库有以下几种对应关系?
用户级库是否必须只创建和管理用户线程,而不创建和管理内核线程?
内核级库是否必须只创建和管理内核线程,而不创建和管理用户线程?
用户线程是否一定由用户级库而不是内核级库创建和管理?
内核线程是否一定由内核级库而不是用户级库创建和管理?
书上说“Pthreads,POSIX 标准的线程扩展,可以作为用户级库或内核级库提供。”
PThread 在 Linux 中是内核级库,在 Windows 中是用户级库吗?
PThread 是否根据定义创建和管理用户线程或内核线程?
谢谢。
最佳答案
Does a user-level library necessarily create and manage only user threads but no kernel threads?
这里的“用户级库”似乎是指不依赖于允许创建和管理线程的内核系统调用的库,因此根据定义它无法创建内核线程。
这里的想法是内核仍然不知道您正在进程内进行线程化。这种方法的主要限制是此类进程同时不能使用多个处理器核心。
Does a kernel-level library necessarily create and manage only kernel threads but no user threads?
“内核级库”有点用词不当。库是一个用户空间的概念。在某些情况下,库函数和内核系统调用之间可能存在一一对应的关系,但这通常不是最实用的解决方案。
在Linux中,有一个clone
系统调用可以创建一个新进程。这个新进程可以与父进程共享内存、文件描述符和其他资源。在较高层次上,我们经常将此类进程称为一个进程内的线程。直接使用系统调用通常会带来不必要的复杂性,并且使可移植性变得困难,因此通常使用用户空间库。
常用的 pthread 实现是“内核级”的,即 pthread 线程与系统线程一一对应,但在许多情况下,库函数调用不需要与系统调用一一对应。特别是,最常用的函数经过专门设计,因此在大多数情况下不需要使用系统调用。它有助于提高性能。
可以通过其他方式实现 pthread,但这似乎是最实用的。它将大多数选项留给库用户,因为内部或外部线程之间没有额外的间接级别。
Are user threads necessarily created and managed by user-level libraries not by kernel-level libraries?
“用户线程”只是内核无法识别的类似进程的结构。 “内核级”库可能会使用类似的东西。也可以直接实现它们而不使用任何库。
Are kernel threads necessarily created and managed by kernel-level libraries not by user-level libraries?
内核线程的创建依赖于创建线程的系统调用。大多数情况下它会在库中使用,但原则上您可以直接调用它们。
关于linux - 用户线程和内核线程与线程级库和内核级库是否有以下任何一种对应关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52334997/
Java 库和 android 库有什么区别,各自有什么优点/缺点? 最佳答案 您可以在 Android 应用程序中包含标准 Java .jar 文件库。它们在 .apk 构建时被翻译成 Dalvik
所以,我现在的代码就像从 Java 层加载库(比如 liba.so),并在内部 liba.so 加载 libb.so。因此,如果我必须将所有库打包到 APK 中并将其安装在没有 root 访问权限的设
我想在我的系统中设置 LEDA 库。 我已经从以下链接下载了 LEDA 库 http://www.algorithmic-solutions.info/free/d5.php Instruct
我想用 autoconf 创建一个共享库。但是,我希望共享库具有“.so”扩展名,而不是以“lib”开头。基本上,我想制作一个加载 dlopen 的插件。 .是否有捷径可寻? 当我尝试使用 autoc
我需要在 Apps 脚本应用程序上修改 PDF。为此,我想使用 JS 库:PDF-LIB 我的代码: eval(UrlFetchApp.fetch("https://unpkg.com/pdf-lib
我正在构建一个使用以下 Boost header 的程序(我使用的是 Microsoft Visual C++ 10), #include #include #include #include
当我通过 cygwin 在 hadoop 上运行此命令时: $bin/hadoop jar hadoop-examples-*.jar grep input output 'dfs[a-z.]+' 我
我已经通过 vcpgk 成功安装了一个 C++ 库,名为:lmdb:x64-windows 我还安装了lmdb通过 Cabal 安装的 Haskell 绑定(bind)包 在尝试测试 lmdb 包时:
我该如何解决这个问题? 我刚刚将 javacv jar 文件复制到我的项目 Lib 文件夹下,但出现了这个错误! 我可以找到这个thread来自谷歌,但不幸的是,由于我国的谷歌限制政策,该页面无法打开
我有一个 Android 库项目 FooLib。 FooLib 引用 Android Context 之类的东西,但不需要任何资源文件(res/ 中的东西)所以我目前将其打包为供我的应用使用的 JAR
我正在开发一个 Android 应用程序(使用 Android Studio),它能够通过手势识别算法了解您正在进行的 Activity 。对于我使用 nickgillian ithub 帐户上可用的
关于从 .NET Framework 项目中引用 .NET Standard 类库的问题有很多类似的问题,其中 netstandard 库中的 NuGet 包依赖项不会流向 netframework
我已经从互联网上下载了 jna-4.2.2.jar,现在想将这个 jar 导入到我的项目中。但是当我试图将这个 jar 导入我的项目时,出现以下错误。 [2016-06-20 09:35:01 - F
我正在尝试通过编译在 Mac 上安装 rsync 3.2.3。但是,我想安装所有功能。为此,它需要一些库,此处 ( https://download.samba.org/pub/rsync/INSTA
进入 Web 开发有点困难。过去 5 年我一直致力于 winforms 工作。所以我正在努力从一种切换到另一种。前段时间,我使用过 JavaScript,但现在还没有大量的 JavaScript 库
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 1
我正在寻找一个用Python编写的与logstash(ruby + java)类似的工具/库。 我的目标是: 从 syslog 中解析所有系统日志 解析应用程序特定日志(apache、django、m
就目前情况而言,这个问题不太适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、民意调查或扩展讨论。如果您觉得这个问题可以改进并可能重新开放,visit
我花了几天时间试图寻找用于 JavaPOS 实现的 .jar 库,但我找不到任何可以工作的东西。我找到了很多像这样的文档:http://jpos.1045706.n5.nabble.com/file/
这个问题在这里已经有了答案: Merge multiple .so shared libraries (2 个答案) 关闭 9 年前。 我有我在代码中使用的第三方库的源代码和对象。该库附带有关如何使
我是一名优秀的程序员,十分优秀!