0%

本文是译文,原文由 Chris Wellons 创作,首刊于这里
本文已被翻译成日语乌克兰语中文
本文还有一后续

Linux 的线程设计十分优美:线程只不过是共享虚拟地址空间和文件描述符表的进程而已。由某一进程产生的线程是该主线程(父进程)的子进程。除了少数线程相关的系统调用,操作线程的系统调用与操作进程的系统调用完全相同。这种优美与文件描述符的优美异曲同工。

通常来说,在类-Unix 的系统上,进程是通过 fork() 来生成的。新生成的进程的虚拟内存空间是原进程的拷贝,但具有独立的地址空间和文件描述符表。(Linux 使用写时拷贝技术提升了这一步骤的效率)不过,对于创建线程来说,这种做法太高级(high-level)了;因此 Linux 还有名为 clone() 的系统调用。它与 fork() 的行为大致相同,只不过它能通过一系列参数控制其行为:主要是控制子进程与父进程之间共享那些运行时上下文。

在进程的栈上创建一个新的线程非常简单——只需要 15 条命令,而无需任何库,特别是不需要调用 pthread 库!本文中,我将以 x86-64 平台为例。所有代码均以 NASM 语法写就,因为,依我愚见,它是至今为止最好的(参见:这里)。

此处是完整的示例代码:Pure assembly, library-free Linux threading demo

阅读全文 »

我打小就与音乐结缘,先后学习过声乐和钢琴,接触过的乐器就更多。作为人类智慧的结晶(EVA 渚薰语),音乐总是与高贵、优雅、美丽这些美好的形容词挂钩。另一方面,物理和数学又代表着人类心智的荣耀。作为写作的缘和由,这无疑是很强大的了。因此,这一系列将介绍音乐中的物理和数学知识。

这是系列文章的第一篇,讲讲和声音相关最基本的一些知识。

阅读全文 »

三门问题是一个源自博弈论的数学游戏。三门问题的等价问题出现的很早,三囚犯问题至少在 1959 年马丁·加德纳的《数学游戏》专栏中就已有阐述。但是让三门问题真正引起广泛讨论的,当属美国的电视游戏节目 Let's Make a Deal。因该节目的主持人名为蒙蒂·霍尔,故而该问题也称为「蒙蒂·霍尔问题」。问题的描述大致如下:

参赛者会看见三扇关闭了的门,其中一扇的后面有汽车,选中后面有汽车的那扇门就可以赢得该汽车,而另外两扇门后面则各藏有一只山羊。当参赛者选定了一扇门,但未去开启它的时候,节目主持人开启剩下两扇门的其中一扇,露出其中一只山羊。主持人其后会问参赛者要不要换另一扇仍然关上的门。问题是:换另一扇门会否增加参赛者赢得汽车的机会率?

三门问题引起了广泛的讨论。例如在果壳网知乎网上,你能找到大量相关讨论。

本文将尽可能清晰地对三门问题做完整讨论。

阅读全文 »