<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Concurrency on RawCull</title><link>https://techrawcull.netlify.app/tags/concurrency/</link><description>Recent content in Concurrency on RawCull</description><generator>Hugo</generator><language>en</language><lastBuildDate>Sat, 01 Aug 2026 15:21:25 +0200</lastBuildDate><atom:link href="https://techrawcull.netlify.app/tags/concurrency/index.xml" rel="self" type="application/rss+xml"/><item><title>Concurrency</title><link>https://techrawcull.netlify.app/docs/concurrency-revised/</link><pubDate>Sat, 01 Aug 2026 00:00:00 +0000</pubDate><guid>https://techrawcull.netlify.app/docs/concurrency-revised/</guid><description>&lt;h1 id="concurrency"&gt;Concurrency&lt;a class="td-heading-self-link" href="#concurrency" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;This page documents concurrency in the &lt;code&gt;RawCullAIModels&lt;/code&gt; branch of RawCull and in the first-party Swift packages checked out beside it. The audit covers production source in the RawCull app, &lt;code&gt;DecodeEncodeGeneric&lt;/code&gt;, &lt;code&gt;ParseRsyncOutput&lt;/code&gt;, &lt;code&gt;PhotoAIKit&lt;/code&gt;, &lt;code&gt;PhotoAnalysisKit&lt;/code&gt;, &lt;code&gt;RawCullCore&lt;/code&gt;, &lt;code&gt;RawParserKit&lt;/code&gt;, &lt;code&gt;RsyncArguments&lt;/code&gt;, &lt;code&gt;RsyncProcessStreaming&lt;/code&gt;, and &lt;code&gt;RsyncAnalyse&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;RawCull uses concurrency to keep SwiftUI responsive while it scans folders, reads RAW metadata, extracts and caches previews, calculates sharpness, creates similarity artifacts, groups bursts, runs AI models, downloads model assets, and streams rsync output.&lt;/p&gt;</description></item><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>