CNode

Node 里的代码是多线程的吗, 为什么有的代码重复执行了多次?[失误.. Closed]

Jjiyinyiyong发布于14 年前最后回复14 年前2 回复4057 浏览0 收藏

一段效率很低的代码.. LiveScript.. 古怪字符比较多的样子.. 然后很奇怪地发现运行过程打印了很多遍... 按照代码的逻辑. 同样的列表只可能打印一次的呀...

global <<< require \prelude-ls
show = console.log

primes = [2 3 5]
n = 5

not-even = (a, b) -> (mod a, b) isnt 0

is-prime = (n) ->
  s = 0
  e = (length primes) - 1
  for i in [s to e]
    m = primes[i]
    if (mod n, m) is 0 then return no
  yes

loop
  n += 2
  if n >= 20000
    show sum primes
    # show primes
    return
  if is-prime n
    primes.push n
    # show n
  show primes[((length primes) - 5) to ]

打印的结果, 我按了 ctrl + c 取到个一个片段.. 明显重复了... 这是为什么?

[ 14831, 14843, 14851, 14867, 14869 ]
[ 14843, 14851, 14867, 14869, 14879 ]
[ 14843, 14851, 14867, 14869, 14879 ]
[ 14843, 14851, 14867, 14869, 14879 ]
[ 14843, 14851, 14867, 14869, 14879 ]
[ 14851, 14867, 14869, 14879, 14887 ]
[ 14851, 14867, 14869, 14879, 14887 ]
[ 14867, 14869, 14879, 14887, 14891 ]
[ 14867, 14869, 14879, 14887, 14891 ]
[ 14867, 14869, 14879, 14887, 14891 ]
[ 14869, 14879, 14887, 14891, 14897 ]
[ 14869, 14879, 14887, 14891, 14897 ]
[ 14869, 14879, 14887, 14891, 14897 ]
[ 14869, 14879, 14887, 14891, 14897 ]
[ 14869, 14879, 14887, 14891, 14897 ]
[ 14869, 14879, 14887, 14891, 14897 ]
[ 14869, 14879, 14887, 14891, 14897 ]
[ 14869, 14879, 14887, 14891, 14897 ]
[ 14869, 14879, 14887, 14891, 14897 ]

发现是我理解错误.. 抱歉,, 废贴了

查看回复

回复 (2)

L
leizongmin#1·14 年前

看不懂这个所谓的LiveScript是个神马东西,猜一下应该是这段代码的问题:

loop
  n += 2
  if n >= 20000
    show sum primes
    # show primes
    return
  if is-prime n
    primes.push n
    # show n
  show primes[((length primes) - 5) to ]

那个loop貌似是一个循环,但是没有循环退出条件,就像JavaScript中这样的死循环了:

for (;;) {
  // ......
}
J
jiyinyiyong#2·14 年前
引用 leizongmin看不懂这个所谓的LiveScript是个神马东西,猜一下应该是这段代码的问题: 那个loop貌似是一个循环,但是没有循环退出条件,就像JavaScript中这样的死循环了:

不好意思.. 是我错了...... 代码逻辑是两个相邻的质数中间都会打印一遍... 我的算法太慢要跑很久. 弄错了结果. ... 正在发愁怎么把这贴删掉...

说起来在哪儿看到过 V8 会把 JS 程序优化成多线程的. 不知道是不是真的.. 我当时没理解就往那儿想了..

参与回复
登录后即可参与回复。登录