<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Blocking on RawCull</title><link>https://techrawcull.netlify.app/tags/blocking/</link><description>Recent content in Blocking on RawCull</description><generator>Hugo</generator><language>en</language><lastBuildDate>Thu, 30 Jul 2026 07:59:27 +0200</lastBuildDate><atom:link href="https://techrawcull.netlify.app/tags/blocking/index.xml" rel="self" type="application/rss+xml"/><item><title>Synchronous Code</title><link>https://techrawcull.netlify.app/docs/heavy/</link><pubDate>Tue, 19 May 2026 00:00:00 +0000</pubDate><guid>https://techrawcull.netlify.app/docs/heavy/</guid><description>&lt;h1 id="synchronous-code"&gt;Synchronous Code&lt;a class="td-heading-self-link" href="#synchronous-code" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Most RawCull code uses async/await, actors, and task groups. Some Apple framework work is still fundamentally synchronous: ImageIO thumbnail decode, CoreImage RAW rendering, JPEG encoding, and direct binary MakerNote parsing. This page explains where that work lives and how the app keeps it from freezing the UI or starving Swift&amp;rsquo;s cooperative executor.&lt;/p&gt;
&lt;h2 id="source-map"&gt;Source Map&lt;a class="td-heading-self-link" href="#source-map" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Area&lt;/th&gt;
					&lt;th&gt;Files&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;Cancellation-aware blocking bridge&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;RawParserKit/Sources/RawParserKit/CancellableImageIOWork.swift&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Thumbnail extraction&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;SonyThumbnailExtractor.swift&lt;/code&gt;, &lt;code&gt;NikonThumbnailExtractor.swift&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Embedded JPEG extraction&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;JPGSonyARWExtractor.swift&lt;/code&gt;, &lt;code&gt;JPGNikonNEFExtractor.swift&lt;/code&gt;, &lt;code&gt;SonyRAWJPEGCreator.swift&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;MakerNote parsing&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;SonyMakerNoteParser.swift&lt;/code&gt;, &lt;code&gt;NikonMakerNoteParser.swift&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;App callers&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;RequestThumbnail.swift&lt;/code&gt;, &lt;code&gt;ScanAndCreateThumbnails.swift&lt;/code&gt;, &lt;code&gt;ExtractAndSaveJPGs.swift&lt;/code&gt;, &lt;code&gt;ScanAndExtractJPGs.swift&lt;/code&gt;, &lt;code&gt;ZoomPreviewHandler.swift&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Sharpness scoring&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;FocusMaskEngine+Scoring.swift&lt;/code&gt;, &lt;code&gt;FocusMaskEngine+MaskGeneration.swift&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="why-blocking-work-matters"&gt;Why Blocking Work Matters&lt;a class="td-heading-self-link" href="#why-blocking-work-matters" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Swift&amp;rsquo;s cooperative thread pool expects async tasks to suspend instead of occupying threads for long periods. ImageIO and CoreImage calls often do not suspend; they block until decode/render work is done.&lt;/p&gt;</description></item></channel></rss>