Do these 3 things before closing this tab:
1Repair Windows errors before they cause bigger problems2Scan for outdated or missing drivers - takes under a minute3Clear out junk files and repair common Windows errorsUse an OTP behaviour such as GenServer when a component needs a long-lived process with state, a standard request protocol, system-message handling, or a supervised lifecycle. Use ordinary functions for calculations and domain logic that do not need process identity or retained runtime state. Choose a plain spawned process only when you have a real need for a custom message loop or lifecycle.
These are not different kinds of BEAM execution: a GenServer is an Elixir process. The decision is about the process machinery and lifecycle your component needs—not about where to put code.
When should I use a GenServer?
Choose a GenServer when one process should own runtime state or provide a conventional service interface. Its callbacks let you implement a protocol for synchronous calls and asynchronous casts while the behaviour manages the receive loop. The GenServer documentation also describes support for system messages—including periodic messages and monitoring events—optional naming, tracing and error reporting, and compatibility with supervision trees.
A GenServer is still an ordinary Elixir process; use GenServer gives it a standard set of callbacks and process interactions. That abstraction is useful when those conventions match the component’s job.
#1 Best Overall
- Read Before You Buy — No Video Output: These adapters support charging and USB 2.0 data transfer, but cannot transmit video signals. Except for standard USB webcams (which use USB data only), they are not compatible with HDMI/DisplayPort cables, video-capable USB-C hubs, or docking stations with video output.
- Convert USB-A Ports to USB-C: Designed to connect USB-C earphones, cables, flash drives, card readers, and other USB-C accessories to standard USB-A ports. Plug-and-play with no drivers or software required.
- Aluminum Alloy Housing: Built with a sturdy aluminum alloy shell that aids in heat dissipation and protects against daily wear and scratches. Designed to maintain a stable and secure connection.
- Compact & Travel-Friendly: The ultra-compact design allows the adapter to stay plugged into your device without blocking adjacent ports or adding bulk, reducing wear and tear on your original USB ports.
- 12-Month Warranty: Backed by a 12-month manufacturer warranty for peace of mind. Designed to meet strict quality control standards for reliable everyday performance.
Good fits
- A long-lived in-memory component that owns state and processes updates through a defined protocol.
- A service that needs a stable call/cast interface, a registered name, or standard handling of system messages.
- A child process whose startup, shutdown, monitoring, and restart policy should be managed as part of an OTP supervision tree.
Do I need a GenServer for this?
Start with the simplest option that supplies the runtime behavior you actually need. The options overlap: a GenServer is a process, while functions need not create one at all.
| Need | Starting point | Why |
|---|---|---|
| Calculation, validation, transformation, or domain logic | Ordinary functions and modules | No process identity or retained runtime state is required. A GenServer would add message-based indirection and could funnel unrelated work through one mailbox. |
| One isolated concurrent computation | A task abstraction, or a small plain process when its lifecycle is simple | Concurrency alone does not imply a long-lived stateful server. Make result collection, cancellation, and failure handling explicit. |
| Long-lived state with serialized updates | GenServer or a more specific OTP behaviour | A process owns the state and handles a standard protocol through callbacks. |
| Named service, periodic work, system messages, or supervised lifecycle | GenServer or the OTP behaviour that matches the protocol | OTP provides common process interfaces and integrates children into supervision. |
| Custom receive protocol or unusual lifecycle | Consider a plain process if the custom behavior is a genuine requirement | A custom loop can fit specialized needs, but you take responsibility for its lifecycle and failure handling. |
Keep business logic separate from process mechanics
Even when a GenServer is the right runtime component, keep calculations and domain rules in ordinary functions when that makes them reusable and independently testable. Callbacks should coordinate process state and protocol handling rather than turn every operation into a message round trip.
Rank #2
- 5-in-1 USB-C Hub: Experience comprehensive connectivity featuring a Power Delivery input, two USB-A 2.0 ports, a USB-A 3.0 port, and an HDMI port. (Note: The USB-C power delivery input port is only for connecting an external wall charger to power your laptop and cannot power peripheral devices.)
- 90W Pass-Through Charging: Achieve optimal charging with 90W pass-through power to your laptop, supported by a total input of 100W, with the hub reserving 10W for operational efficiency. (Note: Wall charger not included.)
- Quick Data Transfers: Accelerate your productivity with rapid data transfers using a high-speed 5Gbps USB 3.0 port and two 480Mbps USB 2.0 ports.
- 4K HDMI Display: Enhance your visual experience with a hub capable of delivering 4K resolution at 30Hz in both mirror and extend modes. Please note that this hub is compatible with MacBook (macOS 12 and newer), Windows 10 and 11, ChromeOS, and laptops equipped with DP Alt Mode and Power Delivery. Note: This device is not compatible with Linux.
- What You Get: Anker USB-C Hub (5-in-1, 4K HDMI), welcome guide, 18-month warranty, and our friendly customer service.
When should I use a plain Elixir process?
A plain process is appropriate when you deliberately need a custom receive loop or lifecycle that the standard behaviour does not fit. Elixir processes communicate through messages; links can propagate abnormal exits to linked processes that are not trapping exits. Those mechanics can be useful, but a bare spawn does not by itself provide a considered restart strategy.
Use a custom process only when the custom protocol is worth owning its message handling and failure behavior. If the component needs conventional calls, system-message integration, and supervised startup or recovery, a GenServer or another suitable OTP behaviour usually supplies a clearer structure.
Rank #3
- Sleek 7-in-1 USB-C Hub: Features an HDMI port, two USB-A 3.0 ports, and a USB-C data port, each providing 5Gbps transfer speeds. It also includes a USB-C PD input port for charging up to 100W and dual SD and TF card slots, all in a compact design.
- Flawless 4K@60Hz Video with HDMI: Delivers exceptional clarity and smoothness with its 4K@60Hz HDMI port, making it ideal for high-definition presentations and entertainment. (Note: Only the HDMI port supports video projection; the USB-C port is for data transfer only.)
- Double Up on Efficiency: The two USB-A 3.0 ports and a USB-C port support a fast 5Gbps data rate, significantly boosting your transfer speeds and improving productivity.
- Fast and Reliable 85W Charging: Offers high-capacity, speedy charging for laptops up to 85W, so you spend less time tethered to an outlet and more time being productive.
- What You Get: Anker USB-C Hub (7-in-1), welcome guide, 18-month warranty, and our friendly customer service.
What does OTP supervision add?
A supervisor is itself a process. It supervises child processes in a hierarchy called a supervision tree, providing structure for fault tolerance and application startup and shutdown. The Supervisor documentation describes the tree as the place to encapsulate these lifecycle concerns. A module using GenServer provides a child specification so it can be started beneath a supervisor.
Supervision defines lifecycle and recovery policy around processes; it does not make a GenServer a different execution primitive. Choose and configure the supervision strategy to match how the application should respond when a child exits.
Rank #4
- Dual Converters, Infinite Potential:Includes 2× USB C male to USB A female adapters and 2× USB A male to USB C female adapters. Perfect for a wide range of uses—tablets with Bluetooth keyboards, expand USB ports on macbook, and more. Two different converters for all your daily needs
- Next-Level 10Gbps & 3A Charging: No more slow 480Mbps, this usb to usb c adapter has a transfer speed of up to 10Gbps, allowing you to do more transferring in less time. This usb adapter fits both USB A and USB C charger, supporting up to 3A fast charging
- Upgraded Exquisite Craftsmanship: With an aluminum alloy housing and metal connector, the usbc to usb adapter is extremely durable and sturdy. Rigorously tested to withstand more than 10,000 times of plugging and unplugging, ensuring long-lasting performance
- Broad Compatible: The usb c to usb adapter widely supports all USB C/ USB A devices like laptops, tablets, cellphones, car chargers, and phone chargers. Such as compatible with MacBook Pro/Air 2023/2022, Thunderbolt 4/3 Devices,Apple MagSafe Watch 9/8/7/SE/Ultra, iPad Pro 2022/2021, Samsung Galaxy S23/S20/S10, and iPhone 17/16/15 Pro. Plug and play
- Please Note: To reach 10Gbps speed, keep the cable under 3.3 ft. For USB A Male to USB C adapters, try flipping the USB C connector. USB C Male to USB A adapters support bidirectional 10Gbps transfer within 3.3 ft
Why not put every function behind one GenServer?
The GenServer guide states that a GenServer must never be used for code organization purposes. Its calculator example routes simple addition and subtraction through a single server; the documentation calls this an anti-pattern because it convolutes the logic and puts operations behind one process that can become a bottleneck as calls grow.
“If you don’t need a process, then you don’t need a process.” — Elixir GenServer documentation, “When (not) to use a GenServer”
Quick wins for a faster PC:
Fix the driver behind crashes, sound loss and screen glitchesFind Drivers →Repair Windows errors before they cause bigger problemsFix Now →Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.Best Value
Anker USB C Hub, 5-in-1 USBC to HDMI Splitter with 4K Display
- 5-in-1 Connectivity: Equipped with a 4K HDMI port, a 5 Gbps USB-C data port, two 5 Gbps USB-A ports, and a USB C 100W PD-IN port. Note: The USB C 100W PD-IN port supports only charging and does not support data transfer devices such as headphones or speakers.
- Powerful Pass-Through Charging: Supports up to 85W pass-through charging so you can power up your laptop while you use the hub. Note: Pass-through charging requires a charger (not included). Note: To achieve full power for iPad, we recommend using a 45W wall charger.
- Transfer Files in Seconds: Move files to and from your laptop at speeds of up to 5 Gbps via the USB-C and USB-A data ports. Note: The USB C 5Gbps Data port does not support video output.
- HD Display: Connect to the HDMI port to stream or mirror content to an external monitor in resolutions of up to 4K@30Hz. Note: The USB-C ports do not support video output.
- What You Get: Anker 332 USB-C Hub (5-in-1), welcome guide, our worry-free 18-month warranty, and friendly customer service.
This is an architectural warning, not a universal speed ranking. A single mailbox can serialize work that could otherwise be independent, but the cited documentation does not establish that plain processes are always faster. If throughput matters, profile the workload and identify the actual bottleneck.
How should I decide?
- Ask whether runtime process behavior is required. If the work is just a calculation or transformation, use a function.
- Identify state and protocol needs. If a long-lived component owns state and should handle standard calls or casts, use a GenServer or a more specific OTP behaviour.
- Decide how it should start and recover. If the component belongs to the application’s managed lifecycle, define it as a supervised child and choose a recovery policy.
- Use a custom process only for a real custom requirement. Account for its message loop, monitoring, and failure behavior rather than treating
spawnas a substitute for supervision. - Measure performance where it matters. Do not assume that choosing one abstraction guarantees higher throughput.
Which Elixir and OTP versions does this apply to?
The process-versus-behaviour distinction is about design, but compatibility details change by release. As of October 4, 2026, the official Elixir documentation index lists Elixir v1.20.4 as stable and Erlang/OTP 27, 28, and 29 as supported for it. Check the compatibility requirements for your project’s specific Elixir and Erlang/OTP versions before installing or upgrading.
Quick Recap
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.

