[原]Threads vs Processes in Linux 分析

Linux中thread (light-weighted process) 跟process在實作上幾乎一樣。

最大的差異來自於,thread 會分享 virtual memory address space.

a. 從kernel角度看兩者沒差別,在user看來process是least shared而thread是most sharing.

b. 從實作角度來比較:

創建user process的方法是有三個API: fork, vfork, clone
創建user thread的方法主要是使用thread library: pthread_create
創建kernel thread的方法有兩種API: kernel_thread, kthread_create

而以上這些API還有library function最後都會call到do_fork
而do_fork所做的事就是填task_struct,這邊有一個我覺得很酷的觀念要講一下
          *** 只要填好task_struct就是把該task給創建出來了 !!! *** 
可以知道其實user process, user thread就只是在task_struct的填法不一樣而已。

ref.

[1]http://www.mulix.org/lectures/kernel_workshop_mar_2004/things.pdf

[2]http://stackoverflow.com/questions/807506/threads-vs-processes-in-linux

Linux uses a 1-1 threading model, with (to the kernel) no distinction between processes and threads
-- everything is simply a runnable task. *

On Linux, the system call clone clones a task, with a configurable level of sharing, among which are:

CLONE_FILES: share the same file descriptor table (instead of creating a copy)
CLONE_PARENT: don‘t set up a parent-child relationship between the new task and the old
(otherwise, child‘s getppid() = parent‘s getpid())
CLONE_VM: share the same memory space (instead of creating a COW copy)
fork() calls clone(least sharing) and pthread_create() calls clone(most sharing). **

forking costs a tiny bit more than pthread_createing because of copying tables and creating COW mappings for memory,
but the Linux kernel developers have tried (and succeeded) at minimizing those costs.

Switching between tasks, if they share the same memory space and various tables, will be a tiny bit cheaper
than if they aren‘t shared, because the data may already be loaded in cache. However,
switching tasks is still very fast even if nothing is shared -- this is something else that Linux kernel developers
try to ensure (and succeed at ensuring).

In fact, if you are on a multi-processor system, not sharing may actually be a performance boon:
if each task is running on a different processor, synchronizing shared memory is expensive.

[原]Threads vs Processes in Linux 分析

时间: 2024-10-21 15:18:57

[原]Threads vs Processes in Linux 分析的相关文章

Show All Running Processes in Linux

ps由于历史的原因,所以很奇特,有些命令必须加"-",比如: ps A 上面的写法是错误的 ********* simple selection ********* ********* selection by list ********* -A all processes -C by command name -N negate selection -G by real group ID (supports names) -a all w/ tty except session le

Greenlets, threads, and processes

Greenlets, threads, and processes [转载] It's very common in a program to want to do two things at once: repaginate a document while still responding to user input, or handle requests from two (or 10000) web browsers at the same time. In fact, pretty m

Imaging Techniques in Document Analysis Processes(文档分析过程中的图像技术)

4. Imaging Techniques in Document Analysis Processes(文档分析过程中的图像技术) ContentsIntroduction. ....................................................................................... 74Basic Image Processing Algorithms. ....................................

基于Xenomai的实时Linux分析与研究

转自:http://blog.csdn.net/cyberlabs/article/details/6967192 引 言 随着嵌入式设备的快速发展,嵌入式设备的功能和灵活性要求越来越高,很多嵌入式设备中都开始使用操作系统.由于工作的特殊性, 很多嵌入式设备要求系统对外部事件的中断响应必须在事先设定的时限范围内完成,使系统具有可预测性,而通用的桌面操作系统大都是非实时或者是软实时的,无 法满足需求,因此就必须使用实时操作系统(Real—Time Operating System,RTOS).  

[原]那些年整理的Linux常用命令,简单明了

转载自:http://www.cnblogs.com/purediy/p/4288649.html 查询相关 find 按规则查找某个文件或文件夹,包括子目录 find . -name '*.sh' -- 以.sh结尾的文件 find . -name '*channel*' -- 包含channel字符的文件 find . -name 'build*' -- 以build开头的文件 find . -name 'abc??' -- abc后面有两个字符的文件 grep 查找内容包含指定的范本样式的

ArcSOC进程数不断增长导致oracle processes溢出原因分析

现场出现了一个问题,oracle运行一段时间之后,process个数会溢出,然后新的连接会失败.通过分析,发现Arcgis Server 的ArcSOC进程在不段增长.ArcSOC是arcgis server 的一个容器进程,该容器中装载arcgis object. 计划尝试用两个方法来解决/缓解这一问题. 方法一 调整每个服务的配置信息,具体如下: 将空间实例可持续运行的最长时间由1800s降低到600s 将实例的隔离级别设置为"低隔离性",如下图: 建议:先使用第一种方法修改服务配

linux分析apache日志获取最多访问的前10个IP

apache日志分析可以获得很多有用的信息,现在来试试最基本的,获取最多访问的前10个IP地址及访问次数. 既然是统计,那么awk是必不可少的,好用而高效. 命令如下: awk '{a[$1] += 1;} END {for (i in a) printf("%d %s\n", a[i], i);}' 日志文件 | sort -n | tail 首先用awk统计出来一个列表,然后用sort进行排序,最后用tail取最后的10个. 以上参数可以略作修改显示更多的数据,比如将tail加上-

linux分析和排查系统故障

一.日志文件 日志文件目录: /var/log/messages:记录linux内核消息及各种应用程序的公共日志信息 /var/log/cron:记录crond计划任务产生的事件信息 /var/log/maillog:记录进入或发出系统的电子邮件活动 /var/log/dmesg:记录linux系统在引导过程中的各种事件 /var/log/lastlog:记录每个用户最近的登陆事件 /var/log/secure:记录用户认证相关的安全事件信息 /var/log/wtmp:记录每个用户登录,注销

Linux分析日志获取最多访问的前10个IP

原文地址:http://xuqq999.blog.51cto.com/3357083/774714 apache日志分析可以获得很多有用的信息,现在来试试最基本的,获取最多访问的前10个IP地址及访问次数. 既然是统计,那么awk是必不可少的,好用而高效. 命令如下: awk '{a[$1] += 1;} END {for (i in a) printf("%d %s\n", a[i], i);}' 日志文件 | sort -n | tail 首先用awk统计出来一个列表,然后用sor