..

作为码农,看到thread这词儿想到什么

看到 thread, 就是线程。

比如modern C++ 上的 thread 1

// thread example
#include <iostream>       // std::cout
#include <thread>         // std::thread
 
void foo() 
{
  // do stuff...
}

void bar(int x)
{
  // do stuff...
}

int main() 
{
  std::thread first (foo);     // spawn new thread that calls foo()
  std::thread second (bar,0);  // spawn new thread that calls bar(0)

  std::cout << "main, foo and bar now execute concurrently...\n";

  // synchronize threads:
  first.join();                // pauses until first finishes
  second.join();               // pauses until second finishes

  std::cout << "foo and bar completed.\n";

  return 0;
}

再比如rust 上的 thread 2

use std::thread;

thread::spawn(move || {
    // some work here
});

又或者go,嗯,go 上叫做 goroutine 3

package main

import (
    "fmt"
    "time"
)

func f(from string) {
    for i := 0; i < 3; i++ {
        fmt.Println(from, ":", i)
    }
}

func main() {

    f("direct")

    go f("goroutine")

    go func(msg string) {
        fmt.Println(msg)
    }("going")

    time.Sleep(time.Second)
    fmt.Println("done")
}

最后Java上的 thread 4

class PrimeThread extends Thread {
    long minPrime;
    PrimeThread(long minPrime) {
        this.minPrime = minPrime;
    }

    public void run() {
        // compute primes larger than minPrime
        . . .
    }
}

PrimeThread p = new PrimeThread(143);
p.start();

于是学 Clojure的时候,看到了 thread 这词儿依然立马想到的是线程,加上一个 -> 符号来表示,心想厉害了,高级啊。几分钟过后, 发现不是那么回事儿,不是这个意思。 可以先看 thread 单词定义,https://www.merriam-webster.com/dictionary/thread 。

在 Clojure 上是这么使用的,结果是 3。

(def c 5)
(-> c (+ 3) (/ 2) (- 1)) 

这下明白了,就是把 c 穿线一样经过后面的几个 expr, 像一股泉水穿过多个溪流到了,最后看一下这股泉水经过各种磨难还是不是曾经的那个少年 ^_^。于是修改了 abclojure 项目中的相关实现,使得代码更加 Clojure 化。 我觉得一套新语言学的好不好,或者到位不到位,看一看代码的风格化是不是跟该语言一致,也是个很重要的参考。毕竟代码是给人看的,写的四不像,那是学会了吗?

至于 Clojure 上多线程怎么实现的,我表示还没有学会,正在抽空学习中。。。