如何识别擅长多线程编程的程序员?

时间:2009-08-04 09:15:21

标签: multithreading language-agnostic

如果要为团队分配一个涉及大量多线程编码的任务,团队是否应该有任何先决条件?

你会寻找什么?

9 个答案:

答案 0 :(得分:11)

让团队到咖啡厅喝杯,确保只有1汤匙。

奖金:在其他人加糖之前搅拌咖啡的人,就输了。


(严肃地说,问问他们,看看谁知道两个线程之间有共享对象的对象成员,以及其他共享资源。请问他们如何防止这种情况,然后问他们如何让你的MT应用程序执行而不会在任何地方放锁。向他们询问死锁问题。如果他们不知道答案,他们就没有足够的经验,或者需要阅读这个主题,并在代码开始后对代码进行良好的设计评审。)

答案 1 :(得分:2)

线程通常是如此错综复杂,因此具体实现我认为评估这个问题的唯一有效方法是将它们设置为模拟任务(在所需的架构中)并“拥有它”。涉及竞争的读者/作家/工作者的东西 - 以及必要时的UI。

当然......你还需要有人有资格评估他们的努力......

你也可以谈论整体原则,但我不确定是否涵盖了它。例如,就在昨天的C#领域,对于涉及内存模型,语言规范和clr规范的一些微妙问题存在很多混淆。您无法用模糊的术语评估这种类型的细节;它必须非常特定于问题。

同样,每个框架的工具/方法也会发生变化。 OCAML / F#等具有非常不同的Java / C#线程代码 - 甚至每个版本都有更改(参见Parallel Extensions / TPL vs 2.5中的ReaderWriterLockSlim与2.0中的ReaderWriterLock相比)

答案 2 :(得分:1)

我会找一些该死的好程序员。

此外,更重要的是,有一个团队可以考虑你正在做的任何事情的架构。在复杂的系统中,你必须要有一个可行的设计 - 你只是无法弥补,并希望最好。

答案 3 :(得分:1)

给他们一个破碎的多线程问题并让他们解决它。

问他们:

  • 什么是交易记忆?
  • 为什么人们讨厌共享状态并发?
  • 什么是活锁?
  • 什么是演员?
  • 与那些餐饮哲学家的交易是什么?
  • 如何构建复杂的多线程应用程序?
  • 为什么只有1个UI线程?
  • 什么是互斥?什么是信号量?
  • 读者如何锁定,为什么要使用它?
  • 什么时候创建新主题?
  • 什么是绿色线,什么是纤维?

棘手的是找到一位专家,你需要一位专家才能开始。

答案 4 :(得分:1)

一个团队至少需要一个对此有经验的人。特别是建筑师(如果你有这个角色)应该有经验。 要检查:通常它在人们的简历中是可见的(如果是外部的)。 否则,只要问一些未解决的问题。比如:你将如何解决synchronisation betweeen two tasks 我有兴趣:  * 态度  *过程(即如果人们有一些相关问题,这是一个好兆头) 然后你仍然可以投入为什么你认为这是一个很好的解决方案?

当然,你仍然需要能够判断答案正确性的人,因为有几种正确的解决方案是可能的。

答案 5 :(得分:0)

有趣的问题......也许您可以从生产代码中获取真正的多线程相关错误并让他们修复它。理想情况下,他们将与他们合作的系统。也许可以将其分解为多线程方面,这样他们就不必学习整个系统。

答案 6 :(得分:0)

我会雇用具有使用您使用的语言在您感兴趣的体系结构上实现MT应用程序的记录的人员。我知道这似乎是无情的,每个人都必须开始在某个地方学习新技术,但我很自私,不想让他们在我的项目中做到这一点!

答案 7 :(得分:0)

寻找功能性程序员。避免多线程问题的最佳方法通常不是确保它们不会发生,而是确保它们不能发生:而不是使副作用线程安全,不要使用副作用。这正是函数式编程所做的。您的函数式程序员会将这个想法带入他们的非功能性代码中。

答案 8 :(得分:0)

让他们解释Java中“可见性”的概念。这是非常复杂的,你只能通过严重的前曝光才能做到正确。