Editing
Gen
Jump to navigation
Jump to search
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
== Gen == [[File:Elixir logo.svg|alt=Elixir programming language logo]] Gen is a module in the [[Elixir (programming language)|Elixir]] programming language that is used for building generic servers. It provides a framework for designing and implementing stateful and concurrent systems. == Overview == The Gen module is part of the Elixir standard library and offers a set of functions and macros for creating generic servers. A generic server is a process that maintains state and responds to messages sent by other processes. This pattern is commonly used for implementing servers, supervisors, and event buses. === Key Concepts === The Gen module introduces several key concepts for building generic servers: * `GenServer`: A behavior that provides a callback API for defining server behavior, including handling requests, managing state, and handling errors. * `start`: A function for starting a new GenServer process. * `call`: A synchronous function for sending a request message to a GenServer and waiting for a response. * `cast`: An asynchronous function for sending a non-blocking request message to a GenServer. * `handle_call`: A callback function that defines how a GenServer handles incoming synchronous requests. * `handle_cast`: A callback function that defines how a GenServer handles incoming asynchronous requests. * `handle_info`: A callback function that defines how a GenServer handles incoming non-request messages. * `init`: A callback function that initializes a GenServer's state. === Usage === To use the Gen module, you will typically define a module for your server, implementing the `GenServer` behavior. This includes defining the callbacks for handling requests, initializing the state, and handling non-request messages. You can then start a new instance of your server using the `start` function. Below is an example of a simple GenServer that maintains a counter: ```elixir defmodule CounterServer do use GenServer def start_link do GenServer.start_link(__MODULE__, 0) end def handle_call(:get_count, _from, state) do {:reply, state, state} end def handle_cast(:increment, state) do {:noreply, state + 1} end end {:ok, pid} = CounterServer.start_link GenServer.call(pid, :get_count) #=> 0 GenServer.cast(pid, :increment) GenServer.call(pid, :get_count) #=> 1 ``` === Related Articles === * [[Concurrency in Elixir]] * [[Processes in Elixir]] * [[Supervision in Elixir]] * [[Event Bus in Elixir]] == References == * [[Elixir (programming language)]] * [[GenServer API documentation]]
Summary:
Please note that all contributions to Elixir Wiki may be edited, altered, or removed by other contributors. If you do not want your writing to be edited mercilessly, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource (see
Elixir Wiki:Copyrights
for details).
Do not submit copyrighted work without permission!
Cancel
Editing help
(opens in new window)
Navigation menu
Personal tools
Not logged in
Talk
Contributions
Create account
Log in
Namespaces
Page
Discussion
English
Views
Read
Edit
View history
More
Navigation
Main page
Recent changes
Random page
Help about MediaWiki
Tools
What links here
Related changes
Special pages
Page information