成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

100%原生的JavaScript多線程和并行執(zhí)行庫(kù):Hamsters.js

開(kāi)發(fā) 前端
Hamsters是一個(gè)能讓JavaScript代碼并行執(zhí)行的原生庫(kù),它可以讓你面向高性能的JavaScript編程,它是一個(gè)開(kāi)源項(xiàng)目,Github上標(biāo)星4k+。它的目的就是讓你更加容易的利用多線程的強(qiáng)大功能來(lái)并行編程實(shí)現(xiàn)性能的提升!

介紹

Hamsters是一個(gè)能讓JavaScript代碼并行執(zhí)行的原生庫(kù),它可以讓你面向高性能的JavaScript編程,它是一個(gè)開(kāi)源項(xiàng)目,Github上標(biāo)星4k+。它的目的就是讓你更加容易的利用多線程的強(qiáng)大功能來(lái)并行編程實(shí)現(xiàn)性能的提升!

[[275039]]

Github

https://github.com/austinksmith/Hamsters.js

特性

  • 多功能,通過(guò)跨多個(gè)線程來(lái)最大限度地提高性能。

[[275040]] 

  • 自動(dòng)數(shù)據(jù)聚合,自動(dòng)將問(wèn)題分解成較小的部分,并與單個(gè)輸出并行執(zhí)行。

[[275041]] 

  • 自動(dòng)分類,按字母順序或數(shù)字自動(dòng)排序輸出。

[[275042]] 

  • LEGACY 支持。

[[275043]] 

  • 備忘,計(jì)算一次后不再浪費(fèi) cpu 周期做同樣的工作

[[275044]] 

  • 開(kāi)放源代碼,100%開(kāi)源代碼庫(kù),根據(jù)Artistic License 2.0發(fā)布

[[275045]] 

支持的環(huán)境

  • 所有主流瀏覽器、IE9 +

[[275046]] 

  • 現(xiàn)有 Web workers

[[275047]] 

  • Javascript shell 環(huán)境

100%原生的JavaScript多線程和并行執(zhí)行庫(kù)——Hamsters.js 

  • React Native

[[275048]] 

  • Node.js
[[275049]]

如何使用?

安裝使用

  1. bower install WebHamsters 
  2. //OR 
  3. npm install hamsters.js 
  • 1、普通HTMl項(xiàng)目中使用 
  1. <!-- HTML4 and (x)HTML --> 
  2.  <script type="text/javascript" src="path/to/hamsters.js"
  3.  <!-- HTML5 --> 
  4.  <script src="path/to/hamsters.js"></script> 
  • 2、React Native
  1. import hamsters from 'path/to/hamsters'
  2.  import Worker from '...'
  3.  import hamsters from 'hamsters.js'
  4.  hamsters.init({ 
  5.  Worker: Worker 
  6.  }); 

  • 3、Nodejs
  1. var hamsters = require('hamsters.js'); 
  1. var Worker = require('...').Worker; 
  2.  var hamsters = require('hamsters.js'); 
  3.  hamsters.init({ 
  4.  Worker: Worker 
  5.  }); 
  • 4、入門使用

第一個(gè)要理解的是Hamsters.js是一個(gè)傳遞interfafce的消息,因此在使用庫(kù)調(diào)用函數(shù)時(shí),我們需要通過(guò)將params對(duì)象(消息)傳遞給庫(kù)來(lái)指示庫(kù)如何操作。

  1. var params = { 
  2.  bar: 'foo' 
  3.  }; 
  4.  hamsters.run(params, ....); 

我們將使用的下一個(gè)參數(shù)將是我們想要在一個(gè)線程或線程中執(zhí)行的邏輯,我們之前傳遞的params對(duì)象將在我們的函數(shù)的上下文中可訪問(wèn)。現(xiàn)在應(yīng)該能夠看到如何確保可以在線程中訪問(wèn)變量和函數(shù)等不同的東西。

  1. hamsters.run(params, function() { 
  2. var foo = params.bar; 
  3. });  

第三個(gè)也是最后一個(gè)參數(shù)將是我們的onSuccess回調(diào)方法,此函數(shù)所需的唯一參數(shù)是輸出。

  1. hamsters.run(params, function() { 
  2.  var foo = params.bar; 
  3.  }, function(results) { 
  4.  console.log(results); 
  5.  }); 

回到原始的params對(duì)象,為了從庫(kù)中獲得最佳性能和可靠性,需遵循一些約定。Hamsters.js的構(gòu)建目標(biāo)是并行而不是并發(fā),盡管庫(kù)很好地實(shí)現(xiàn)了并行執(zhí)行的主要目標(biāo)。由于這樣做的各種設(shè)計(jì)決策是為了幫助實(shí)現(xiàn)這一目標(biāo),其中一個(gè)決定是庫(kù)如何在線程之間分割數(shù)據(jù)以便執(zhí)行,因此您希望在多個(gè)線程中訪問(wèn)的任何數(shù)組必須在您的參數(shù)內(nèi)具有數(shù)組索引賓語(yǔ)。

  1. var params = { 
  2.  array: [1, 2, 3, 4]; 
  3.  }; 
  4.  hamsters.run(params, function() { 
  5.  for(var i = 0; i < params.array; i++) { 
  6.  rtn.data.push(params.array[i] * 4); 
  7.  } 
  8.  }, function(results) { 
  9.  }); 

使用此約定,通過(guò)簡(jiǎn)單地更改params對(duì)象中的一個(gè)選項(xiàng),可以非常簡(jiǎn)單地并行化上述方法。現(xiàn)在使用下面的方法,4個(gè)線程將完成相同的任務(wù),每個(gè)線程僅在數(shù)組的一個(gè)數(shù)字上運(yùn)行。

  1. var params = { 
  2.  array: [1, 2, 3, 4]; 
  3.  threads: 4 
  4.  }; 
  5.  hamsters.run(params, function() { 
  6.  for(var i = 0; i < params.array; i++) { 
  7.  rtn.data.push(params.array[i] * 4); 
  8.  } 
  9.  }, function(results) { 
  10.  }); 

更進(jìn)一步,庫(kù)使用一個(gè)名為rtn的內(nèi)部返回對(duì)象,這個(gè)rtn對(duì)象對(duì)于庫(kù)具有一致的方式來(lái)處理線程輸出是至關(guān)重要的。因此,當(dāng)我們想要從線程返回一個(gè)值時(shí),我們需要將結(jié)果推送到rtn.data數(shù)組中。或者你可以讓你的rtn.data輸出,但只有當(dāng)你的輸出已經(jīng)是一個(gè)數(shù)組。

  1. hamsters.run(params, function() { 
  2.  rtn.data.push(params.bar); 
  3.  }, function(results) { 
  4.  console.log(results); // 'foo'
  5.  }); 

通過(guò)以上代碼來(lái)看下它傳遞的參數(shù):

  1. var params = { 
  2.  threads: Integer
  3.  aggregate: Boolean, 
  4.  dataType: String, 
  5.  memoize: Boolean 
  6.  sort: String, 
  7.  }; 

1、threads這個(gè)可選參數(shù)將告訴庫(kù)執(zhí)行先前聲明的函數(shù)的線程數(shù),這允許在非常簡(jiǎn)單的級(jí)別上更改您執(zhí)行的線程數(shù)。如果您在此處未提供值,則庫(kù)默認(rèn)值為1。

2、aggregate此可選參數(shù)將告訴庫(kù)我們是否要在執(zhí)行后將各個(gè)線程輸出聚合在一起,這僅在您跨多個(gè)線程執(zhí)行并且默認(rèn)為相關(guān)時(shí)才相關(guān)false。

3、dataType此可選參數(shù)將通知庫(kù)我們的數(shù)據(jù)數(shù)組是JavaScript的類型化數(shù)組之一,在使用此參數(shù)時(shí),庫(kù)將自動(dòng)格式化輸出以匹配指定的輸出dataType。

4、memoize此可選參數(shù)旨在與memoization模式結(jié)合使用,當(dāng)啟用memoization模式時(shí),此參數(shù)允許用戶控制單個(gè)函數(shù)級(jí)別是否緩存該函數(shù)的結(jié)果,其默認(rèn)值為false。

5、sort此可選參數(shù)將告訴庫(kù)按字母順序或數(shù)字順序自動(dòng)對(duì)最終輸出進(jìn)行排序,此參數(shù)的默認(rèn)值為,null并且可以使用排序選項(xiàng)進(jìn)行配置。

params對(duì)象中包含的任何其他內(nèi)容都可以在線程的執(zhí)行上下文或多個(gè)線程中訪問(wèn),具體取決于您使用庫(kù)的方式。

除了以上基本使用方式,你可以查看官方的相關(guān)文檔,有詳細(xì)的介紹和使用方式,如Promise、排序、memoization、可轉(zhuǎn)移對(duì)象、persistence、線程池、限制、設(shè)備等

總結(jié)

多線程和并行編程在Javascript中本身不是一件容易的事情,但是可借助第三方原生庫(kù)來(lái)彌補(bǔ)它,能讓你更加方便的進(jìn)行多線程的編程,筆者可能并未介紹的非常清楚,如果你有這方面的需求,可以去查案Hamsters.js的相關(guān)文檔來(lái)體驗(yàn)這種編程,希望對(duì)你有所幫助!

[[275050]]

 

責(zé)任編輯:龐桂玉 來(lái)源: 今日頭條
相關(guān)推薦

2021-09-09 07:16:00

C#多線程開(kāi)發(fā)

2024-09-29 16:22:18

多線程TaskC#

2024-09-27 19:42:09

工具C#Task?

2010-04-27 17:23:34

AIX系統(tǒng)

2013-12-26 13:36:27

JavaScript技巧

2021-04-20 12:39:52

Node.js多線程多進(jìn)程

2021-08-04 23:30:28

Node.js開(kāi)發(fā)線程

2020-06-16 14:19:50

Javascript多線程編程

2009-03-12 10:52:43

Java線程多線程

2021-09-11 15:26:23

Java多線程線程池

2023-10-26 21:44:02

Java多線程方法

2013-06-13 13:19:38

多線程

2022-08-13 11:53:52

多線程內(nèi)存

2012-11-12 09:26:06

.NET多線程

2019-03-29 16:40:02

Node.js多線程前端

2020-08-20 07:54:58

Node多線程解密

2013-06-06 10:53:39

Javascript裝載

2023-06-13 13:39:00

多線程異步編程

2019-10-29 20:13:43

Java技術(shù)程序員

2024-05-29 09:13:37

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 国产91在线 | 亚洲 | 中国美女一级黄色片 | 色婷婷久久久亚洲一区二区三区 | 91porn在线观看 | 一区二区视频 | 精品国产一区二区在线 | 久草视频在线播放 | 国产精品乱码一二三区的特点 | 国产精品一码二码三码在线 | 久久99网 | 国产精品日韩一区二区 | 亚洲高清在线观看 | 99热精品在线观看 | 欧美视频三区 | 在线视频日韩 | 久久av在线播放 | 久操国产 | 噜噜噜噜狠狠狠7777视频 | 欧美中文字幕一区二区 | 亚洲成人一级 | 久在线 | 亚洲 欧美 日韩在线 | 羞羞视频免费在线观看 | 丁香久久| 精品一区二区三区在线观看国产 | 日韩欧美亚洲一区 | 中文字幕精品一区二区三区精品 | 亚洲一区视频 | 日韩久久中文字幕 | 免费中文字幕日韩欧美 | 日本在线精品视频 | 午夜精品 | 久久亚洲一区二区三区四区 | 久久se精品一区精品二区 | 日日日日日日bbbbb视频 | 中文字幕一区二区三区日韩精品 | 日日摸夜夜添夜夜添精品视频 | 成人免费在线 | 成人精品国产免费网站 | 亚洲精品68久久久一区 | 一区视频在线 |