作者归档

并发数据结构-1.1 并发的数据结构的设计

原文链接译文链接,译者:董明鑫,校对:周可人

随着多个处理器共享同一内存的机器在商业上的广泛使用,并发编程的艺术也产生了巨大的变化。当前的趋势向着低功耗芯片级多线程(CMT)发展,所以这样的机器一定会更加广泛的被使用。

共享内存多处理器是指并发的执行多个线程的系统,这些线程在共享的内存中通过数据结构通讯和同步。这些数据结构的效率对于性能是很关键的,而目前熟练掌握为多处理器机器设计高效数据结构这一技术的人并不多。对大多数人来说,设计并发的数据结构比设计单线程的难多了,因为并发执行的线程可能会多种方式地交错运行他们的指令,每一种方式会带来不同的,甚至不符合预期的输出。这就要求设计者改变他们对运算的认识,理解新的设计方法,采用新的编程工具集。此外,设计可扩展的并发数据结构,使得当机器执行越来越多的并发线程时依旧表现良好也是新的挑战。本文主要介绍设计并发数据结构的相关挑战,和一些重要的数据结构相关内容的总结。我们的总结绝不是全面的;相反,我们特意选取了一些能说明设计的关键问题的流行的数据结构,希望我们提供了足够的背景和知识,让有兴趣的读者接触那些我们没有提到的内容。
阅读全文

上下文切换详解

原文地址译文地址,译者: 董明鑫,校对:郑旭东

上下文切换(有时也称做进程切换或任务切换)是指 CPU 从一个进程或线程切换到另一个进程或线程。
进程(有时候也称做任务)是指一个程序运行的实例。在 Linux 系统中,线程就是能并行运行并且与他们的父进程(创建他们的进程)共享同一地址空间(一段内存区域)和其他资源的轻量级的进程。
上下文是指某一时间点 CPU 寄存器和程序计数器的内容。寄存器是 CPU 内部的数量较少但是速度很快的内存(与之对应的是 CPU 外部相对较慢的 RAM 主内存)。寄存器通过对常用值(通常是运算的中间值)的快速访问来提高计算机程序运行的速度。程序计数器是一个专用的寄存器,用于表明指令序列中 CPU 正在执行的位置,存的值为正在执行的指令的位置或者下一个将要被执行的指令的位置,具体依赖于特定的系统。
稍微详细描述一下,上下文切换可以认为是内核(操作系统的核心)在 CPU 上对于进程(包括线程)进行以下的活动:(1)挂起一个进程,将这个进程在 CPU 中的状态(上下文)存储于内存中的某处,(2)在内存中检索下一个进程的上下文并将其在 CPU 的寄存器中恢复,(3)跳转到程序计数器所指向的位置(即跳转到进程被中断时的代码行),以恢复该进程。 阅读全文

参加阿里巴巴校招面试经历

阿里巴巴
本文主要是讲述我参加阿里巴巴2013年校招的经历,感谢并发编程网博主的推荐。

电面

说是电话面试,其实和正常面试感觉没啥区别,也是聊,也是写代码。 用的是这个工具,http://codassium.com/ ,双方写东西,对方都能看到。面试最开始普遍都是让自我介绍,这是吹牛的良好机会,主要内容为:看了哪些牛逼的书,认识哪些牛逼的人,做了哪些牛逼的事。然后就到了问问题的阶段。

问题1.主要是根据做所项目,由于之前做了一个操作系统的模型,所以问了一下进程间调度和通信是如何实现的。又问了一下linux下进程间通信都有哪些方式。

回答大概说调度是基于进程控制块(PCB),我简单做了一个时间片轮转的调度。通信也做的很简单。进程间通信的方式大概是管道(命名、匿名),消息队列,信号,共享内存和socket,只说了这几个。

return top