<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.haidhi.my.id/wiki/index.php?action=history&amp;feed=atom&amp;title=Threads</id>
	<title>Threads - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.haidhi.my.id/wiki/index.php?action=history&amp;feed=atom&amp;title=Threads"/>
	<link rel="alternate" type="text/html" href="https://wiki.haidhi.my.id/wiki/index.php?title=Threads&amp;action=history"/>
	<updated>2026-11-01T19:54:17Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.0</generator>
	<entry>
		<id>https://wiki.haidhi.my.id/wiki/index.php?title=Threads&amp;diff=840&amp;oldid=prev</id>
		<title>SanzSkuy at 04:10, 24 August 2026</title>
		<link rel="alternate" type="text/html" href="https://wiki.haidhi.my.id/wiki/index.php?title=Threads&amp;diff=840&amp;oldid=prev"/>
		<updated>2026-08-24T04:10:35Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 04:10, 24 August 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l35&quot;&gt;Line 35:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 35:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Selain itu, &amp;#039;&amp;#039;&amp;#039;multi-threading adalah salah satu cara membuat program berjalan lebih cepat ketika tersedia beberapa processor&amp;#039;&amp;#039;&amp;#039; — dibahas lebih jauh di §1.9.2.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Selain itu, &amp;#039;&amp;#039;&amp;#039;multi-threading adalah salah satu cara membuat program berjalan lebih cepat ketika tersedia beberapa processor&amp;#039;&amp;#039;&amp;#039; — dibahas lebih jauh di §1.9.2.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Note&lt;/del&gt;|title=Dua motivasi yang berbeda|Perhatikan bahwa ada dua alasan berbeda untuk pakai thread. Yang pertama soal &#039;&#039;struktur program&#039;&#039; (concurrency: mengurus banyak hal yang saling menunggu), yang kedua soal &#039;&#039;kecepatan&#039;&#039; (parallelism: memakai lebih dari satu core). Program bisa butuh yang satu tanpa butuh yang lain.}}&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Catatan&lt;/ins&gt;|title=Dua motivasi yang berbeda|Perhatikan bahwa ada dua alasan berbeda untuk pakai thread. Yang pertama soal &#039;&#039;struktur program&#039;&#039; (concurrency: mengurus banyak hal yang saling menunggu), yang kedua soal &#039;&#039;kecepatan&#039;&#039; (parallelism: memakai lebih dari satu core). Program bisa butuh yang satu tanpa butuh yang lain.}}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Sisi lain dari kemudahan berbagi ==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Sisi lain dari kemudahan berbagi ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>SanzSkuy</name></author>
	</entry>
	<entry>
		<id>https://wiki.haidhi.my.id/wiki/index.php?title=Threads&amp;diff=839&amp;oldid=prev</id>
		<title>SanzSkuy at 04:07, 24 August 2026</title>
		<link rel="alternate" type="text/html" href="https://wiki.haidhi.my.id/wiki/index.php?title=Threads&amp;diff=839&amp;oldid=prev"/>
		<updated>2026-08-24T04:07:45Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 04:07, 24 August 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l92&quot;&gt;Line 92:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 92:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Lihat juga ==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Lihat juga ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* [[&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Processes&lt;/del&gt;]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* [[&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Process&lt;/ins&gt;]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* [[OS Manages Hardware]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* [[OS Manages Hardware]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* [[Virtual Memory]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* [[Virtual Memory]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* [[CS:APP]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* [[CS:APP]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>SanzSkuy</name></author>
	</entry>
	<entry>
		<id>https://wiki.haidhi.my.id/wiki/index.php?title=Threads&amp;diff=838&amp;oldid=prev</id>
		<title>SanzSkuy: Created page with &quot;== Pergeseran model mental ==  Sampai sini kita biasanya membayangkan process punya &#039;&#039;&#039;satu alur kontrol tunggal&#039;&#039;&#039; — satu PC yang bergerak dari instruksi ke instruksi.  Di sistem modern, kenyataannya lebih luas: sebuah process bisa terdiri dari &#039;&#039;&#039;beberapa unit eksekusi&#039;&#039;&#039; yang disebut &#039;&#039;&#039;thread&#039;&#039;&#039;. Masing-masing thread:  * jalan &#039;&#039;&#039;di dalam context process&#039;&#039;&#039; yang sama * &#039;&#039;&#039;berbagi code dan global data&#039;&#039;&#039; yang sama  Jadi hubungannya bertingkat: OS punya banyak proces...&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.haidhi.my.id/wiki/index.php?title=Threads&amp;diff=838&amp;oldid=prev"/>
		<updated>2026-08-24T04:07:36Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;== Pergeseran model mental ==  Sampai sini kita biasanya membayangkan process punya &amp;#039;&amp;#039;&amp;#039;satu alur kontrol tunggal&amp;#039;&amp;#039;&amp;#039; — satu PC yang bergerak dari instruksi ke instruksi.  Di sistem modern, kenyataannya lebih luas: sebuah process bisa terdiri dari &amp;#039;&amp;#039;&amp;#039;beberapa unit eksekusi&amp;#039;&amp;#039;&amp;#039; yang disebut &amp;#039;&amp;#039;&amp;#039;thread&amp;#039;&amp;#039;&amp;#039;. Masing-masing thread:  * jalan &amp;#039;&amp;#039;&amp;#039;di dalam context process&amp;#039;&amp;#039;&amp;#039; yang sama * &amp;#039;&amp;#039;&amp;#039;berbagi code dan global data&amp;#039;&amp;#039;&amp;#039; yang sama  Jadi hubungannya bertingkat: OS punya banyak proces...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== Pergeseran model mental ==&lt;br /&gt;
&lt;br /&gt;
Sampai sini kita biasanya membayangkan process punya &amp;#039;&amp;#039;&amp;#039;satu alur kontrol tunggal&amp;#039;&amp;#039;&amp;#039; — satu PC yang bergerak dari instruksi ke instruksi.&lt;br /&gt;
&lt;br /&gt;
Di sistem modern, kenyataannya lebih luas: sebuah process bisa terdiri dari &amp;#039;&amp;#039;&amp;#039;beberapa unit eksekusi&amp;#039;&amp;#039;&amp;#039; yang disebut &amp;#039;&amp;#039;&amp;#039;thread&amp;#039;&amp;#039;&amp;#039;. Masing-masing thread:&lt;br /&gt;
&lt;br /&gt;
* jalan &amp;#039;&amp;#039;&amp;#039;di dalam context process&amp;#039;&amp;#039;&amp;#039; yang sama&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;berbagi code dan global data&amp;#039;&amp;#039;&amp;#039; yang sama&lt;br /&gt;
&lt;br /&gt;
Jadi hubungannya bertingkat: OS punya banyak process, dan tiap process bisa punya banyak thread di dalamnya.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
+---------------------- Process ----------------------+&lt;br /&gt;
|                                                     |&lt;br /&gt;
|   Code  +  Global data       &amp;lt;- dibagi bersama      |&lt;br /&gt;
|                                                     |&lt;br /&gt;
|   +-----------+  +-----------+  +-----------+       |&lt;br /&gt;
|   | Thread 1  |  | Thread 2  |  | Thread 3  |       |&lt;br /&gt;
|   |  PC       |  |  PC       |  |  PC       |       |&lt;br /&gt;
|   |  Register |  |  Register |  |  Register |       |&lt;br /&gt;
|   |  Stack    |  |  Stack    |  |  Stack    |       |&lt;br /&gt;
|   +-----------+  +-----------+  +-----------+       |&lt;br /&gt;
|                                                     |&lt;br /&gt;
+-----------------------------------------------------+&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Kenapa thread makin penting ==&lt;br /&gt;
&lt;br /&gt;
CS:APP menyebut tiga alasan thread jadi model pemrograman yang makin sentral:&lt;br /&gt;
&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;Kebutuhan concurrency di network server.&amp;#039;&amp;#039;&amp;#039; Server harus melayani banyak koneksi sekaligus. Model satu-thread-per-koneksi jauh lebih natural daripada memaksa semuanya masuk satu alur kontrol.&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;Berbagi data antar thread lebih mudah daripada antar process.&amp;#039;&amp;#039;&amp;#039; Karena thread satu process sudah otomatis berbagi ruang alamat, nggak perlu mekanisme IPC seperti pipe, shared memory segment, atau socket.&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;Thread biasanya lebih efisien daripada process.&amp;#039;&amp;#039;&amp;#039; Membuat thread lebih murah daripada membuat process, dan switching antar thread dalam satu process juga lebih ringan.&lt;br /&gt;
&lt;br /&gt;
Selain itu, &amp;#039;&amp;#039;&amp;#039;multi-threading adalah salah satu cara membuat program berjalan lebih cepat ketika tersedia beberapa processor&amp;#039;&amp;#039;&amp;#039; — dibahas lebih jauh di §1.9.2.&lt;br /&gt;
&lt;br /&gt;
{{Note|title=Dua motivasi yang berbeda|Perhatikan bahwa ada dua alasan berbeda untuk pakai thread. Yang pertama soal &amp;#039;&amp;#039;struktur program&amp;#039;&amp;#039; (concurrency: mengurus banyak hal yang saling menunggu), yang kedua soal &amp;#039;&amp;#039;kecepatan&amp;#039;&amp;#039; (parallelism: memakai lebih dari satu core). Program bisa butuh yang satu tanpa butuh yang lain.}}&lt;br /&gt;
&lt;br /&gt;
== Sisi lain dari kemudahan berbagi ==&lt;br /&gt;
&lt;br /&gt;
Poin nomor 2 di atas adalah pisau bermata dua, dan ini penting banget dipahami sejak awal.&lt;br /&gt;
&lt;br /&gt;
Karena thread berbagi ruang alamat yang sama, dua thread bisa menulis ke variabel yang sama &amp;#039;&amp;#039;&amp;#039;pada saat yang sama&amp;#039;&amp;#039;&amp;#039; tanpa ada yang menghalangi. Hasilnya bergantung urutan eksekusi yang tidak kita kendalikan.&lt;br /&gt;
&lt;br /&gt;
{{Warning|title=Harga dari sharing|Kemudahan berbagi data itu sekaligus sumber kelas bug paling sulit di pemrograman sistem: &amp;#039;&amp;#039;data race&amp;#039;&amp;#039;, &amp;#039;&amp;#039;deadlock&amp;#039;&amp;#039;, dan bug yang cuma muncul satu dari sejuta eksekusi. Isolasi antar process yang tadinya terasa merepotkan itu ternyata juga bentuk perlindungan.}}&lt;br /&gt;
&lt;br /&gt;
Antar process, isolasi memory bikin bug semacam ini secara struktural mustahil terjadi. Antar thread, perlindungan itu hilang dan harus digantikan disiplin programmer plus mekanisme sinkronisasi.&lt;br /&gt;
&lt;br /&gt;
== Apa yang dibagi, apa yang privat ==&lt;br /&gt;
&lt;br /&gt;
Ringkasan pembagiannya (detailnya di Bab 12):&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Dibagi bersama seluruh thread !! Privat per thread&lt;br /&gt;
|-&lt;br /&gt;
| Code (text segment) || Program counter&lt;br /&gt;
|-&lt;br /&gt;
| Global data || Register file&lt;br /&gt;
|-&lt;br /&gt;
| Heap || Stack sendiri&lt;br /&gt;
|-&lt;br /&gt;
| File descriptor yang terbuka || Thread ID&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Aturan praktisnya: &amp;#039;&amp;#039;&amp;#039;kalau datanya di stack, biasanya aman; kalau global atau di heap, hati-hati.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
== Catatan untuk kerja systems ==&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;&amp;quot;Thread lebih efisien&amp;quot; itu benar tapi ada batasnya.&amp;#039;&amp;#039;&amp;#039; Membuat thread memang jauh lebih murah daripada membuat process, tapi tiap thread tetap butuh stack sendiri. Ribuan thread berarti ribuan stack — ini salah satu alasan model async/event-driven muncul untuk kasus koneksi sangat banyak.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Switch antar thread satu process lebih murah karena page table-nya sama.&amp;#039;&amp;#039;&amp;#039; Nggak ada penggantian CR3, jadi TLB nggak perlu di-flush total. Tapi cache tetap bisa terganggu.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;False sharing adalah jebakan performa klasik.&amp;#039;&amp;#039;&amp;#039; Dua thread menulis ke variabel berbeda yang kebetulan berada di &amp;#039;&amp;#039;cache line&amp;#039;&amp;#039; yang sama akan saling membatalkan cache satu sama lain. Secara logika nggak ada konflik, secara hardware ada. Solusinya biasanya &amp;#039;&amp;#039;padding&amp;#039;&amp;#039; sampai batas cache line.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Di HPC, thread biasanya di-pin ke core.&amp;#039;&amp;#039;&amp;#039; OpenMP lewat &amp;lt;code&amp;gt;OMP_PROC_BIND&amp;lt;/code&amp;gt; dan &amp;lt;code&amp;gt;OMP_PLACES&amp;lt;/code&amp;gt;, atau &amp;lt;code&amp;gt;numactl&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;taskset&amp;lt;/code&amp;gt; di level proses, supaya thread nggak berpindah core dan kehilangan lokalitas cache.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Bahasa punya sikap berbeda soal ini.&amp;#039;&amp;#039;&amp;#039; Rust memindahkan pengecekan keamanan thread ke &amp;#039;&amp;#039;compile time&amp;#039;&amp;#039; lewat trait &amp;lt;code&amp;gt;Send&amp;lt;/code&amp;gt; dan &amp;lt;code&amp;gt;Sync&amp;lt;/code&amp;gt;, sehingga banyak data race ditolak sebelum program jalan. Python sebaliknya membatasi eksekusi bytecode dengan GIL, sehingga thread bagus untuk I/O-bound tapi tidak memberi speedup untuk CPU-bound.&lt;br /&gt;
&lt;br /&gt;
{{Tip|Kalau tujuannya cuma &amp;#039;&amp;#039;concurrency&amp;#039;&amp;#039; (banyak hal saling menunggu I/O), thread bukan satu-satunya jawaban — async runtime sering lebih hemat. Thread jadi wajib kalau tujuannya &amp;#039;&amp;#039;parallelism&amp;#039;&amp;#039; untuk kerja CPU-bound.}}&lt;br /&gt;
&lt;br /&gt;
== Yang akan datang ==&lt;br /&gt;
&lt;br /&gt;
Konsep dasar concurrency, termasuk cara menulis program ber-thread, dibahas di &amp;#039;&amp;#039;&amp;#039;Bab 12&amp;#039;&amp;#039;&amp;#039;. Diskusi soal memanfaatkan beberapa processor ada di &amp;#039;&amp;#039;&amp;#039;§1.9.2&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
== Istilah kunci ==&lt;br /&gt;
&lt;br /&gt;
; Thread&lt;br /&gt;
: Unit eksekusi di dalam sebuah process; berjalan dalam context process itu dan berbagi code serta global data dengan thread lain.&lt;br /&gt;
; Multi-threading&lt;br /&gt;
: Menjalankan beberapa thread dalam satu process, salah satunya untuk memanfaatkan beberapa processor.&lt;br /&gt;
; Data race&lt;br /&gt;
: Kondisi ketika dua thread mengakses data yang sama tanpa sinkronisasi dan minimal satu di antaranya menulis.&lt;br /&gt;
; False sharing&lt;br /&gt;
: Penurunan performa akibat dua thread menulis ke variabel berbeda yang berada di cache line yang sama.&lt;br /&gt;
&lt;br /&gt;
== Lihat juga ==&lt;br /&gt;
&lt;br /&gt;
* [[Processes]]&lt;br /&gt;
* [[OS Manages Hardware]]&lt;br /&gt;
* [[Virtual Memory]]&lt;br /&gt;
* [[CS:APP]]&lt;/div&gt;</summary>
		<author><name>SanzSkuy</name></author>
	</entry>
</feed>