<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>同期処理 アーカイブ - nyanblog ~にゃんぶろぐ~</title>
	<atom:link href="https://nyanblog2222.com/tag/%E5%90%8C%E6%9C%9F%E5%87%A6%E7%90%86/feed/" rel="self" type="application/rss+xml" />
	<link>https://nyanblog2222.com/tag/同期処理/</link>
	<description>ちょっとしたことを調べているよ</description>
	<lastBuildDate>Fri, 27 Aug 2021 11:39:42 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.7</generator>

<image>
	<url>https://nyanblog2222.com/wp-content/uploads/2021/09/cropped-favicon-32x32.png</url>
	<title>同期処理 アーカイブ - nyanblog ~にゃんぶろぐ~</title>
	<link>https://nyanblog2222.com/tag/同期処理/</link>
	<width>32</width>
	<height>32</height>
</image> 
<atom:link rel="hub" href="https://pubsubhubbub.appspot.com"/><atom:link rel="hub" href="https://pubsubhubbub.superfeedr.com"/><atom:link rel="hub" href="https://websubhub.com/hub"/>	<item>
		<title>【JavaScript】非同期処理と処理の順番について【初心者・入門】</title>
		<link>https://nyanblog2222.com/programming/javascript/984/</link>
					<comments>https://nyanblog2222.com/programming/javascript/984/#respond</comments>
		
		<dc:creator><![CDATA[nyan2222]]></dc:creator>
		<pubDate>Tue, 02 Jun 2020 09:00:00 +0000</pubDate>
				<category><![CDATA[HTML/CSS]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[同期処理]]></category>
		<category><![CDATA[非同期処理]]></category>
		<guid isPermaLink="false">https://nyanblog2222.com/?p=984</guid>

					<description><![CDATA[<p><img src="https://nyanblog2222.com/wp-content/uploads/2022/11/78.png" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="" decoding="async" fetchpriority="high" srcset="https://nyanblog2222.com/wp-content/uploads/2022/11/78.png 1280w, https://nyanblog2222.com/wp-content/uploads/2022/11/78-300x157.png 300w, https://nyanblog2222.com/wp-content/uploads/2022/11/78-1024x536.png 1024w, https://nyanblog2222.com/wp-content/uploads/2022/11/78-768x402.png 768w" sizes="(max-width: 1280px) 100vw, 1280px" />JavaScriptは同期的でシングルスレッドの処理で実行されていますが、非同期処理が可能な言語です。ここでは、非同期処理と同期処理・スレッドについてまず説明し、その後処理の順番について説明していきます。 目次 同期処理 [&#8230;]</p>
<p>投稿 <a href="https://nyanblog2222.com/programming/javascript/984/">【JavaScript】非同期処理と処理の順番について【初心者・入門】</a> は <a href="https://nyanblog2222.com">nyanblog ~にゃんぶろぐ~</a> に最初に表示されました。</p>
]]></description>
										<content:encoded><![CDATA[<img src="https://nyanblog2222.com/wp-content/uploads/2022/11/78.png" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="" decoding="async" srcset="https://nyanblog2222.com/wp-content/uploads/2022/11/78.png 1280w, https://nyanblog2222.com/wp-content/uploads/2022/11/78-300x157.png 300w, https://nyanblog2222.com/wp-content/uploads/2022/11/78-1024x536.png 1024w, https://nyanblog2222.com/wp-content/uploads/2022/11/78-768x402.png 768w" sizes="(max-width: 1280px) 100vw, 1280px" />
<p>JavaScriptは同期的でシングルスレッドの処理で実行されていますが、非同期処理が可能な言語です。<br>ここでは、<strong><span style="color:#b78d4a" class="has-inline-color">非同期処理と同期処理・スレッド</span></strong>についてまず説明し、その後<strong><span style="color:#b78d4a" class="has-inline-color">処理の順番</span></strong>について説明していきます。</p>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-2" checked><label class="toc-title" for="toc-checkbox-2">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">同期処理と非同期処理</a><ol><li><a href="#toc2" tabindex="0">同期処理</a></li><li><a href="#toc3" tabindex="0">非同期処理</a></li></ol></li><li><a href="#toc4" tabindex="0">スレッドについて</a></li><li><a href="#toc5" tabindex="0">処理の順番</a></li><li><a href="#toc6" tabindex="0">まとめ</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">同期処理と非同期処理</span></h2>



<h3 class="wp-block-heading"><span id="toc2">同期処理</span></h3>



<p><strong><span style="color:#b78d4a" class="has-inline-color">同期処理はプログラムの記述順に1つずつ実行</span></strong>されます。<br>そのため、次の処理は前の処理が終わらないと実行することができません。</p>



<h3 class="wp-block-heading"><span id="toc3">非同期処理</span></h3>



<p>非同期処理は同期処理と異なり<strong><span style="color:#b78d4a" class="has-inline-color">処理が実行する準備をしている空き時間の間に、別の処理を実行</span></strong>することができます。</p>



<p>この説明だけだと、<strong><span style="color:#b78d4a" class="has-inline-color">非同期処理は並列で色んな処理ができるってこと？</span></strong>と思うかもしれません。</p>



<p>答えは　<strong><span style="color:#b78d4a" class="has-inline-color">「No」</span></strong>　です。</p>



<p>あくまで、準備している空き時間を活用しているだけなので、並列で複数の処理ができるわけではありません。<br><strong><span style="color:#b78d4a" class="has-inline-color">並列処理を行うためにはマルチスレッドで処理を実行</span></strong>する必要がありますが、<strong><span style="color:#b78d4a" class="has-inline-color">JavaScriptはシングルスレッド</span></strong>で動きますので、<strong><span style="color:#b78d4a" class="has-inline-color">並列処理ではなく、並行処理</span></strong>と言えます。</p>



<p>並列処理と並行処理の違いはこちらです。</p>



<ul class="wp-block-list"><li><strong><span style="color:#b78d4a" class="has-inline-color">並列処理</span></strong><br>物理的に<strong><span style="color:#b78d4a" class="has-inline-color">複数の処理を同時に実行</span></strong>することができる</li><li><strong><span style="color:#b78d4a" class="has-inline-color">並行処理</span></strong><br>常に<strong><span style="color:#b78d4a" class="has-inline-color">1つの処理のみ実行</span></strong>しているが、タイミングを見計らって<strong><span style="color:#b78d4a" class="has-inline-color">処理を切り替えて処理を効率よく実行</span></strong>する<br><strong><span style="color:#b78d4a" class="has-inline-color">同時に実行しているように見せかけている</span></strong></li></ul>



<h2 class="wp-block-heading"><span id="toc4">スレッドについて</span></h2>



<p>先ほど<strong><span style="color:#b78d4a" class="has-inline-color">シングルスレッド</span></strong>と<strong><span style="color:#b78d4a" class="has-inline-color">マルチスレッド</span></strong>について話が出てきましたが、<strong><span style="color:#b78d4a" class="has-inline-color">スレッド</span></strong>とは何でしょうか。</p>



<p><strong><span style="color:#b78d4a" class="has-inline-color">スレッド</span></strong>とは、1つ1つ実行する処理を表します。</p>



<p><strong><span style="color:#b78d4a" class="has-inline-color">シングルスレッド</span></strong>はその名の通り1つの処理を実行することができます。</p>



<p>対し、<strong><span style="color:#b78d4a" class="has-inline-color">マルチスレッド</span></strong>は複数の処理を実行することができます。</p>



<p>これを先ほどの並列処理と並行処理に当てはめると、このようになります。</p>



<ul class="wp-block-list"><li><strong><span style="color:#b78d4a" class="has-inline-color">並列処理</span></strong>・・・マルチスレッドで実行</li><li><strong><span style="color:#b78d4a" class="has-inline-color">並行処理</span></strong>・・・シングルスレッドで実行</li></ul>



<p>JavaScriptは<strong><span style="color:#b78d4a" class="has-inline-color">シングルスレッド</span></strong>のため、<strong><span style="color:#b78d4a" class="has-inline-color">並行処理をしている</span></strong>ことになりますね。</p>



<h2 class="wp-block-heading"><span id="toc5">処理の順番</span></h2>



<p>さて先述のようにJavaScriptはシングルスレッドであることが理解できましたが、並行処理をしているということは、<strong><span style="color:#b78d4a" class="has-inline-color">処理の順番が入れ替わってしまうこと</span></strong>があります。</p>



<p>JavaScriptは<strong><span style="color:#b78d4a" class="has-inline-color">上から順番でキューに関数を登録し、処理</span></strong>しています。<br>しかし、処理が同期的なものと非同期的なものによって、順番が入れ替わることがあります。</p>



<p>＜上から順番に処理する＞</p>



<pre class="wp-block-code javascript"><code>console.log("one");
console.log("two");
console.log("three");</code></pre>



<p>実行結果</p>



<pre class="wp-block-code plaintext"><code>one
two
three</code></pre>



<p>＜順番が入れ替わっている＞</p>



<pre class="wp-block-code javascript"><code>console.log("one");
setTimeout(function(){console.log("two")}, 0);
console.log("three");</code></pre>



<p>実行結果</p>



<pre class="wp-block-code plaintext"><code>one
three
two</code></pre>



<p>順番が入れ替わっているパターンでは<strong><span style="color:#b78d4a" class="has-inline-color">「setTimeout」関数のタイマーを0ミリ秒で設定</span></strong>しています。<br>ここで不思議なのは、タイマーは0ミリ秒…つまり待ち時間なしで実行するように記述されていますが、実際の実行結果はone→<strong><span style="color:#b78d4a" class="has-inline-color">three→two</span></strong>と<strong><span style="color:#b78d4a" class="has-inline-color">2行目と3行目の順番が入れ替わって</span></strong>います。</p>



<p>キューに登録されているのは、<br>　1. ログ表示　&#8221;one&#8221;<br>　2. タイマー登録　0ミリ秒<br>　3. ログ表示　&#8221;three&#8221;<br>この3つの処理になります。<br>つまり、この時点では、<strong><span style="color:#b78d4a" class="has-inline-color">「ログ表示　&#8221;two&#8221;」はキューにまだ登録されていない</span></strong>のです。</p>



<p>では、いつ「ログ表示　&#8221;two&#8221;」はキューに登録されるのか？</p>



<p>それは、<strong><span style="color:#b78d4a" class="has-inline-color">同期処理が全て終わってから</span></strong>です。</p>



<p>なので、キューの登録の順番は、<br>同期処理<br>　1. ログ表示　&#8221;one&#8221;<br>　2. タイマー登録　0ミリ秒<br>　3. ログ表示　&#8221;three&#8221;<br>同期処理の登録完了後、非同期処理<br>　<strong><span style="color:#b78d4a" class="has-inline-color">4.ログ表示　&#8221;two&#8221;</span></strong><br>となります。</p>



<p>だから先ほどの実行結果のように、順番が入れ替わります。</p>



<h2 class="wp-block-heading"><span id="toc6">まとめ</span></h2>



<p>今回はJavaScriptの<strong><span style="color:#b78d4a" class="has-inline-color">非同期処理と同期処理、処理の順番</span></strong>について、説明していきました。<br>JavaScriptで開発するためには、このあたりをまず始めに理解しておきたいところですね！</p>



<p>非同期処理を同期的に処理する方法については、<br>別の記事にしたいと思います。<br>ご覧いただき、ありがとうございました。</p>
<p>投稿 <a href="https://nyanblog2222.com/programming/javascript/984/">【JavaScript】非同期処理と処理の順番について【初心者・入門】</a> は <a href="https://nyanblog2222.com">nyanblog ~にゃんぶろぐ~</a> に最初に表示されました。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://nyanblog2222.com/programming/javascript/984/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
