学习多线程以及 GUI 编程的正确姿势是?

2016-02-03 23:14:53 +08:00
 braineo
Sorry 。昨天发了个贴在工作版没有求到答案。于是到这里再发一次。请各位多多指教。

是这样的:
LZ 在某个大公司供职二年文职工作之后,决意跳到互联网行业……
一年来痛定思痛学习编程刷刷 leetcode ,没想到还真的跳成功了……

自觉水平仍然太菜可能无法胜任,真对不起程序员这个名头。
于是想趁过年期间入职之前再全脱产提高一下自己

想请教一下 多线程(进程), Async ,还有 GUI 编程应该看点什么书提升自己?

自己搜索了一下 直接看<操作系统>的建议很多
我知道这个很重要,但是自己看了一下觉得看不懂概念的也很多而且比较偏理论?
如果能有什么实践导向的我觉得可以学起来没有那么枯燥。
因为个人学习经验上来看,先上理论的会出现看不下去的情况。但是实践过一次再看理论就会有种恍然大悟的感觉

综上,请把各种书或者网站的推荐砸向我 :)谢谢
5368 次点击
所在节点    程序员
60 条回复
braineo
2016-02-04 13:02:45 +08:00
@zhpech 见上一条回复。就是理论上的坑 实践的方法上求能不跳就不跳。简单的例子就是,有 quick sort 这种东西了,刷题的时候让你写一个搜索你要么重新发明一个 quick sort 或者 merge sort ,不然就 brute force sort.正常来说我不需要把 quick sort 的算法从新发明呀。但是就算知道原理在实现的时候肯定会有坑,那种是我想避免的
Andiry
2016-02-04 13:05:02 +08:00
@braineo 最简单的方法:加锁。任何一本操作系统书上都会讲,原理很简单。 so 去看书。
至于跳坑,那是无法避免的,我还没见过学习并发编程没踩过坑的人。
Andiry
2016-02-04 13:07:57 +08:00
专门讲并发编程的书: perfbook ,多处理器编程的艺术
zhpech
2016-02-04 13:16:26 +08:00
@braineo 呃……楼主有这点时间跟我们口胡这么多东西,早就把理论知识点看得差不多了吧,另外我以前也觉得什么 qsort ,数据结构都有现成的,为什么还要自己去写一遍,但是现在觉得他们都有助于理解很多东西,并且很锻炼思维,从坑中也收获颇多,你所谓的理论上的坑,不就是想得太多,看得太少么?

自己想的算法同理,感悟更深刻。

学而不思则罔,思而不学则殆。

楼上所说的加锁确实是行之有效的方法,但锁到什么精度,对于效率是截然不同的,实践可能就会告诉你,加个锁就行了,但操作系统每个可能会告诉你,怎么锁更好,就是这个道理。

同理,只有你自己鼓捣了东西之后你才会发现现有轮子的美。
haoc
2016-02-04 13:17:09 +08:00
@braineo 是的。。个人觉得一开始系统不用看太深入,了解基本概念和原理还有比较重要的问题就行了。因为大部分语言都对操作系统的线程有自己的抽象。
还有,不要用**python/ruby** :p
em70
2016-02-04 14:00:36 +08:00
@braineo 任何语言都内置多线程支持,哪需要你去考虑线程互斥,你亲手做一遍啥都明白了,连做一遍的能力都没有?你压根没入门,你知道吗,多线程是相对高级的应用,你先得学会爬
louk78
2016-02-04 14:34:24 +08:00
学 C++吧,多线程是 C++最基础的东西
braineo
2016-02-04 15:23:02 +08:00
@zhpech 楼主还没放假,楼主还在上班做文职工作,楼主上班没法看别的书但是可以口胡 2 分钟,楼主正在思而不学则 die
asj
2016-02-04 15:24:02 +08:00
@em70 JavaScript 泪目
braineo
2016-02-04 15:25:39 +08:00
@em70 我知道是比较进阶的用法。我自己斤两自己惦记着,我也没提出过于泛泛的问题,你为啥觉得我不会爬啊?还是说在愉快地鄙视文科生?
yuriko
2016-02-04 15:38:50 +08:00
lz 怎么提问显然是还没入门啊……

多线程显然不是你现在需要考虑的问题
入门过程中应该是思考:如何实现->逻辑正确->性能正确->体验优化
多线程至少不是第一步需要考虑和学习的

程序是个实践主导的领域,没有绝对正确的做法,只有合适与否。线程问题同样,连领域都不确定,具体场景也没有,让别人给你个设计指导,这不是说空话么,纸上谈兵的事情在很多实际场景中并不是一回事
braineo
2016-02-04 16:02:39 +08:00
@Andiry 好书啊。谢谢推荐
braineo
2016-02-04 16:02:54 +08:00
@yuriko 因为我还没入职啊
braineo
2016-02-04 16:04:54 +08:00
@iceleaf 太好了 LZ 已经学过 python 了可以跳过第一步了
RqPS6rhmP3Nyn3Tm
2016-02-04 19:47:30 +08:00
据说高手都是用纯 C 的?
isnowify
2016-02-04 22:28:12 +08:00
head first 系列找来看看? 挺有趣的
yuriko
2016-02-05 07:52:42 +08:00
@braineo 并没有说没入门不对

而是说正因为你没入门,还不知道现在真正的关键在哪里,作为一个编程的入门者,完全还没有到需要考虑多线程的时候,你现在需要掌握的是如何在某一个具体实现领域深入下去,当你随随便便就能正确完善的实现功能时,自然会去考虑并发问题。
所以你现在就属于步子太大扯着蛋的典范,让我觉得好想就是连加法还没做好的时候,觉得好多人大学高数要挂,于是就到处问别人微积分怎么做一样。

而且,在不同语言,不同框架,不同应用场景,多线程 /进程,虽然原理大同小异,但实现的时候所考虑的细节却是不同的。
zhpech
2016-02-05 09:44:32 +08:00
@yuriko 同感楼主有点浮躁……
wizardforcel
2016-02-05 19:26:17 +08:00
gui 随便找本书就好了。(或者再看看设计方面的?)

并发的相关内容应该在编程书讲线程书的时候也一起讲了,但是,国内的垃圾教材好像不怎么提及。既然你已经被垃圾教材坑了,现在最好的办法是《 apue 》和《七周七并发模型》。前者讲了线程和锁的基本设施,后者是各种架构上的用法。

async 这种语言级别的特性,编程书怎么可能不讲?
hqs123
2016-02-06 08:18:46 +08:00
windows 核心编程里面也有涉及多线程编程东西楼主可以看下。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/255288

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX