前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >notes-on-7-concurrency-model-in-7-weeks

notes-on-7-concurrency-model-in-7-weeks

作者头像
刘笑江
发布2018-05-28 11:35:09
5730
发布2018-05-28 11:35:09
举报
文章被收录于专栏:刘笑江的专栏刘笑江的专栏

Week 1 线程和锁

优点

易于实现,适用场景广,接近“硬件本质”。

缺点

不够抽象,难以单元测试、Debug、不可重现故障。

Week 2 函数式编程

Day0 Clojure

  • 动态类型
  • 懒惰列表
  • JVM 上的 Lisp 方言
  • 没有可变状态,利于并行化
  • 不支持尾调用消除,不要依赖递归写法
  • 使用 lein run 运行项目,lein repl 进行交互式编程

Day1 词频统计

代码语言:javascript
复制
(defn my-frequencies [words]
    (reduce
        fn [counts word] (assoc counts word (inc (get counts word 0))) 
        {} 
        words))

;; some def
(defn get		[counts] key)			;; map getter
(defn assoc	[counts] key value)	;; map setter
(defn get-words [text] (re-seq #"\w+" text))

;; partial for short
(map (partial * 2) [0 1 2])
(map (fn [x] (* x 2)) [0 1 2])

;; 读取器宏 #(%1 %2 ...)
#(freq (get-words %))
(fn [page] (freq (get-words page))

;; pmap, 并行化map, 仅生成部分需要结果,半懒惰(semi-lazy)
(pmap #(freq (get-words %)) pages)
 
;; 合并 map
(merge-with f & map) 
 
(defn count-words-sequantial [pages]
    (frequencies (mapcat get-words pages)))

Day1 并行化 & fold

优点

缺点

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2015-06-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Week 1 线程和锁
    • 优点
      • 缺点
      • Week 2 函数式编程
        • Day0 Clojure
          • Day1 词频统计
            • Day1 并行化 & fold
              • 优点
                • 缺点
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档