1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package io.netty.channel.kqueue;
17
18 import io.netty.channel.DefaultSelectStrategyFactory;
19 import io.netty.channel.EventLoop;
20 import io.netty.channel.EventLoopTaskQueueFactory;
21 import io.netty.channel.MultithreadEventLoopGroup;
22 import io.netty.channel.SelectStrategyFactory;
23 import io.netty.channel.SingleThreadEventLoop;
24 import io.netty.util.concurrent.EventExecutor;
25 import io.netty.util.concurrent.EventExecutorChooserFactory;
26 import io.netty.util.concurrent.RejectedExecutionHandler;
27 import io.netty.util.concurrent.RejectedExecutionHandlers;
28 import io.netty.util.internal.UnstableApi;
29
30 import java.util.concurrent.Executor;
31 import java.util.concurrent.ThreadFactory;
32
33 @UnstableApi
34 public final class KQueueEventLoopGroup extends MultithreadEventLoopGroup {
35 {
36
37 KQueue.ensureAvailability();
38 }
39
40
41
42 public KQueueEventLoopGroup() {
43 this(0);
44 }
45
46
47
48
49 public KQueueEventLoopGroup(int nThreads) {
50 this(nThreads, (ThreadFactory) null);
51 }
52
53
54
55
56 @SuppressWarnings("deprecation")
57 public KQueueEventLoopGroup(ThreadFactory threadFactory) {
58 this(0, threadFactory, 0);
59 }
60
61
62
63
64 @SuppressWarnings("deprecation")
65 public KQueueEventLoopGroup(int nThreads, SelectStrategyFactory selectStrategyFactory) {
66 this(nThreads, (ThreadFactory) null, selectStrategyFactory);
67 }
68
69
70
71
72 @SuppressWarnings("deprecation")
73 public KQueueEventLoopGroup(int nThreads, ThreadFactory threadFactory) {
74 this(nThreads, threadFactory, 0);
75 }
76
77 public KQueueEventLoopGroup(int nThreads, Executor executor) {
78 this(nThreads, executor, DefaultSelectStrategyFactory.INSTANCE);
79 }
80
81
82
83
84 @SuppressWarnings("deprecation")
85 public KQueueEventLoopGroup(int nThreads, ThreadFactory threadFactory,
86 SelectStrategyFactory selectStrategyFactory) {
87 this(nThreads, threadFactory, 0, selectStrategyFactory);
88 }
89
90
91
92
93
94
95
96 @Deprecated
97 public KQueueEventLoopGroup(int nThreads, ThreadFactory threadFactory, int maxEventsAtOnce) {
98 this(nThreads, threadFactory, maxEventsAtOnce, DefaultSelectStrategyFactory.INSTANCE);
99 }
100
101
102
103
104
105
106
107
108 @Deprecated
109 public KQueueEventLoopGroup(int nThreads, ThreadFactory threadFactory, int maxEventsAtOnce,
110 SelectStrategyFactory selectStrategyFactory) {
111 super(nThreads, threadFactory, maxEventsAtOnce, selectStrategyFactory, RejectedExecutionHandlers.reject());
112 }
113
114 public KQueueEventLoopGroup(int nThreads, Executor executor, SelectStrategyFactory selectStrategyFactory) {
115 super(nThreads, executor, 0, selectStrategyFactory, RejectedExecutionHandlers.reject());
116 }
117
118 public KQueueEventLoopGroup(int nThreads, Executor executor, EventExecutorChooserFactory chooserFactory,
119 SelectStrategyFactory selectStrategyFactory) {
120 super(nThreads, executor, chooserFactory, 0, selectStrategyFactory, RejectedExecutionHandlers.reject());
121 }
122
123 public KQueueEventLoopGroup(int nThreads, Executor executor, EventExecutorChooserFactory chooserFactory,
124 SelectStrategyFactory selectStrategyFactory,
125 RejectedExecutionHandler rejectedExecutionHandler) {
126 super(nThreads, executor, chooserFactory, 0, selectStrategyFactory, rejectedExecutionHandler);
127 }
128
129 public KQueueEventLoopGroup(int nThreads, Executor executor, EventExecutorChooserFactory chooserFactory,
130 SelectStrategyFactory selectStrategyFactory,
131 RejectedExecutionHandler rejectedExecutionHandler,
132 EventLoopTaskQueueFactory queueFactory) {
133 super(nThreads, executor, chooserFactory, 0, selectStrategyFactory,
134 rejectedExecutionHandler, queueFactory);
135 }
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150 public KQueueEventLoopGroup(int nThreads, Executor executor, EventExecutorChooserFactory chooserFactory,
151 SelectStrategyFactory selectStrategyFactory,
152 RejectedExecutionHandler rejectedExecutionHandler,
153 EventLoopTaskQueueFactory taskQueueFactory,
154 EventLoopTaskQueueFactory tailTaskQueueFactory) {
155 super(nThreads, executor, chooserFactory, 0, selectStrategyFactory, rejectedExecutionHandler, taskQueueFactory,
156 tailTaskQueueFactory);
157 }
158
159
160
161
162
163 public void setIoRatio(int ioRatio) {
164 for (EventExecutor e: this) {
165 ((KQueueEventLoop) e).setIoRatio(ioRatio);
166 }
167 }
168
169 @Override
170 protected EventLoop newChild(Executor executor, Object... args) throws Exception {
171 Integer maxEvents = (Integer) args[0];
172 SelectStrategyFactory selectStrategyFactory = (SelectStrategyFactory) args[1];
173 RejectedExecutionHandler rejectedExecutionHandler = (RejectedExecutionHandler) args[2];
174 EventLoopTaskQueueFactory taskQueueFactory = null;
175 EventLoopTaskQueueFactory tailTaskQueueFactory = null;
176
177 int argsLength = args.length;
178 if (argsLength > 3) {
179 taskQueueFactory = (EventLoopTaskQueueFactory) args[3];
180 }
181 if (argsLength > 4) {
182 tailTaskQueueFactory = (EventLoopTaskQueueFactory) args[4];
183 }
184 return new KQueueEventLoop(this, executor, maxEvents,
185 selectStrategyFactory.newSelectStrategy(),
186 rejectedExecutionHandler, taskQueueFactory, tailTaskQueueFactory);
187 }
188 }