..
作为码农,看到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 上多线程怎么实现的,我表示还没有学会,正在抽空学习中。。。