Concurrency in Swing,  Multi-processor system

I have two questions:
1. This is a classic situation where I am looking for a definitive answer on: I've read about the single-thread rule/EDT, SwingWorker, and the use of invokeLater()/invokeAndWait(). The system I am designing will have multiple Swing windows (JInternalFrames) that do fairly complex GUI work. No direct interaction is needed between the windows which greatly simplifies things. Some windows are horrendously complex, and I simply want to ensure that one slow window doesn't bog the rest of the UIs. I'm not entirely clear on what exactly I should be threading: the entire JInternalFrame itself should be runnable? The expensive operation within the JInternalFrame? A good example of this is a complex paint() method: in this case I've heard of spawning a thread to render to a back-buffer of sorts, then blitting the whole thing when ready. In short, what's the cleanest approach here to ensure that one rogue window doesn't block others? I apologize if this is something addressed over and over but most examples seem to point to the classic case of "the expensive DB operation" within a Swing app.
2. Short and sweet: any way to have Swing take advantage of multi-processor systems, say, a system with 6 processors available to it? If you have one Swing process that spawns 10 threads, that's still just one process and the OS probably wouldn't be smart enough to distribute the threads across processors, I'm guessing. Any input on this would be helpful. Thank you!

(1) You need to use a profiler. This is the first step in any sort of optimization. The profiler does two important things: First, it tells you where are the real bottlenecks (which is usually not what you expect), and eliminates any doubt as to a certain section of code being 'slow' or 'fast'. Second, the profilter lets you compare results before and after. That way, you can check that your code changes actually increased performance, and by exactly how much.
(2) Generally speaking, if there are 10 threads and 10 CPU's, then each thread runs concurrently on a different CPU.
As per (1), the suggestion to use double buffering is the likely best way to go. When you think about what it takes to draw an image, 90% of it can be done in a worker thread. The geometry, creating Shapes, drawing then onto a graphics object, transformations and filters, all that can be done offline. Only copying the buffered image onscreen is the 10% that needs to happen in the EDT thread. But again, use a profiler first.

Similar Messages

  • Multi-Processor Systems vs Single Processor systems

    In general, is it better to run Weblogic on a fast single processor system
    or on a multi-processor system where the individual cpus are less powerful?
    I am assuming that the platforms are WINTEL and all other things (memory,
    disk channels etc) are equal.
    What are the licensing implications of one philosophy over the other?

    Jim Ewing wrote:
    >
    In general, is it better to run Weblogic on a fast single processor system
    or on a multi-processor system where the individual cpus are less powerful?
    I am assuming that the platforms are WINTEL and all other things (memory,
    disk channels etc) are equal.You'll hate me for saying this, but it depends on your application and
    your client load.
    I'd suggest that you run a load test against both systems and compare
    the results.
    >
    What are the licensing implications of one philosophy over the other?You pay for WLS by the number of CPUs.
    -- Rob
    Coming Soon: Building J2EE Applications & BEA WebLogic Server
    by Michael Girdley, Rob Woollen, and Sandra Emerson
    http://learnweblogic.com

  • Java and Multi-Processor Systems

    [This may be the wrong form, please point me to the correct one if I should redirect this!]
    Is it possible to use Java in a multiprocessing environment where Java can take advantage of the multiple processors? Naturally Threads are the obvious parallel mechanism, but I suspect there are others.
    Motivation: Basically we are trying to build an inexpensive system to do scientific and mathematical computing where the runs can take hours or days on traditional uniprocessor systems. Presumably a multiprocessor system would be the first stop, although Grid computing may be as effective.
    So any pointers for doing cpu intensive programming with Java would be appreciated!

    You need to have atleast one active thread per CPU.The domain I am looking at is "Agent Based Modeling" (ABM). In that sphere, each agent is fairly independent of all the others, making decisions based on "local knowledge". Our current simulation uses 35,000 agents.
    You may find that different architecture may limit
    the number of processors you can effectively exploit
    but you should be able to use2-4 CPUs without
    signifciant trouble.I'm not clear on how I can ask Java to use the multiprocessors I may have in my system. Do I simply assign a thread to each agent? That would be quite easy to do.
    So I think the question here is: Does Java assign threads to multiprocessors? Does it need a special compile/run flag to do so? Do I need to include special Java code to somehow promote this behavior?
    If the processing is really CPU intensive the best
    option may be to find the bottlenecks with a profiler
    and write them in C. You should be able to get a
    significant speed up this way with minimal
    conversion.That may be necessary, but in the ABM space, people are leaving C for Java due to its being fast enough and the networking support, memory management, etc just too nice to pass up!
    To use multiple threads you need to be able to
    exploit a natural parrellism in the work you are
    doing. If the task is genuinely single threaded you
    wil only every be able to use one CPU.This should be easy, see above .. due to each agent being reasonably independent.
    Thanks for the thoughtful response!

  • Advantages of multi processor systems?

    I am considering getting a new system to use for my photo processing applications. I see that Adobe has releases LR v2.0 which supports 64 bit OS and has announced that CS4, when ever it is released will also support 64 bits, well at least for Windows. This being the case, switching to Vista 64 seems to be the way to go. BUT what about the processor? The choices seem to be a quad core version from either Intel or AMD or moving higher, a Intel Xeon processor. This gives me two more choices, use two 5100 series processors for a total of four cores or go up to two 5400 series processors for a total of eight cores. The 5100 series approach seems to use less power that the 5400's and can be clocked faster. Also, last year I had the opportunity to quickly run a bench mark with CS3 on a Dell dual Xeon workstation running Windows XP 32 bit OS. It appeared that the the system only managed to make use of only 4 of the 8 processors.
    I have done a fair amount of searching and have not found any good answers to the question of which processor configuration will give the best performance. To keep this discussion reasonable I would like to limit it to one quad core processor vs. two dual core Xeons vs. two quad core Xeons.
    Hopefully some of you will be able to shed some insight. It any of the Adobe folks would care to comment, it would be appreciated. I suspect that Adobe has looked into this issue and has lots of information. The question then would be can they share it? Maybe not.
    Bill

    I run a Xeon Quad Core 2.33GHz at work and a Core 2 Duo 2.66GHz at home. Both are very fast, but the Xeon Quad Core is significantly faster. Is it a difference between going home at 5:00 vs. 6:00? Nope, more like 5:00 vs. 5:10 at best. But it does make the workday more pleasant.
    I would go with Vista 64, 8GB (or more) of RAM and something like a Core 2 Quad Q6600. Pop a $40 cooler on that bad boy, overclock to 3.0+ GHz and watch it fly. For more fun, get a Skulltrain motherboard and add a second CPU when your apps can take full advantage of 8 cores.
    And install an nVidia 9800GX2 graphics card - CS4 is supposed to take advantage of advanced GPUs.

  • Multi processor Solaris 2.6 and mutex locks

    hi,
    is anyone aware of any documented issues with Solaris 2.6 running
    on dual-SPARC processors (multi-processor environment) where the
    programs using "mutex locks" (multi-threaded applications), require
    some special handling, in terms of compiling and linking, to some
    special libraries.
    as far as i remember, in some OS book, maybe Peterson's, it was said
    that the mechanism for implementing mutex-locks on multi-processor
    systems is to use low-level spin-locks. this brings down performance
    on a single-processor system, making the processor doing busy-wait,
    but this happens to be the only way of mutex-locking in a multi-processor
    system. if this is so, then where is such behaviour documented in case
    of Solaris 2.6.
    i have had problems with my applications crashing (rathing hanging up)
    in a vfork() on such a system, but same application works fine, with
    100% reproducability, on a single-processor system.
    thanks for any inputs or suggestions and/or information.
    regards,
    banibrata dutta

    I am also facing similar problem. Application which written using Mulit-Threaded using Posix Mutexes. When i run on SINGLE processor manchine, i.e.
    SunOS sund4 5.7 Generic_106541-11 sun4u sparc SUNW,Ultra-5_10
    It works perfectly.
    But when try to run on dual processor machine, i.e.
    SunOS sund2 5.7 Generic_106541-11 sun4u sparc SUNW,Ultra-250
    It is blocking in the one of mutexes.
    Please inform us what is problem. Mr. B. Datta, you comes to know
    any channel, please inform me also at [email protected]
    Thanx & regards,
    -venkat

  • JVM's suport for multicore processors and multiple processor systems

    Hi all,
    Do you have any concrete information about Sun Hot JVM 1.5's support for multi-core processors and also its support for multi processor systems. I ask this because i am looking at deploying a multi threaded application written in Java 5 and want to know the best CPU arrangement for optimal performance.
    Does JVM run itself on multiple CPUs?
    Does JVM run native threads on multiple CPUs ? at the same time.
    Is there a place where i can find out the exact behavior of the JVM in sus environments ?
    Thanks.

    Hi,
    Sun's JVM runs very well on multi-thread/core/chip systems and provides several mechanisms to scale well in such environments (for example Thread Local Allocation Buffers (TLABs), parallel gargabe collection threads etc.). Java threads are 1:1 mapped to operating system threads. There are lots of options that allow you to configure the JVM wrt number of gc threads and so on, although the defaults should in most cases work well. There is a lot information available at http://java.sun.com/docs/performance/index.html and some (quite outdated) information about threading at http://java.sun.com/docs/hotspot/threads/threads.html.
    Nick.

  • WLS on Multi-Processors

    A few questions about WLS 5.1 on multi-processor machines:
    1. Is there anything that needs to be done(other than purchase another
    license) for a weblogic server to work on a multi-processor system?
    2. Will WLS take advantage of all processors with just ONE invocation of WLS?
    Or will I have to run one instance of WLS for each processor?
    3. Will performance gains be uniform or will certain features gain more
    from multiple processors?
    Any answers, insights or pointers to answers are appreciated.
    Thanks.
    -Heng

    >
    I consider WebLogic to be a great no-nonsense J2EE implementation (not
    counting class loaders ;-).Look for major improvements in that area in version 6.0.
    Thanks,
    Michael
    Michael Girdley
    BEA Systems Inc
    "Cameron Purdy" <[email protected]> wrote in message
    news:[email protected]...
    Rob,
    I consider WebLogic to be a great no-nonsense J2EE implementation (not
    counting class loaders ;-). Gemstone's architecture is quite elaboratewhen
    compared to WebLogic, and BTW they spare no opportunity to compare to
    WebLogic although never by name. (Read their white paper on scalabilityto
    see what I mean.) I am quite impressed by their architecture; it appearsto
    be set up for dynamic reconfiguration of many-tier processing. Forexample,
    where WL coalesces (i.e. pass by ref if possible), Gemstone will always
    distribute if possible, creating a "path" through (e.g.) 7 levels of JVMs
    (each level having a dynamic number of JVMs available in a pool) and if
    there is a problem at any level, the request gets re-routed (full failover
    apparently). I would say that they are set up quite well to solve the
    travelling salesperson problem ... you could probably implement aweb-driven
    neural net on their architecture. (I've never used the Gemstone product,
    but I've read about everything that they published on it.) I would assume
    that for certain types of scaling problems, the Gemstone architecturewould
    work very very well. I would also guess that there are latency issues and
    administration nightmares, but I've had the latter with every app server
    that I've ever used, so ... $.02.
    Cameron Purdy
    [email protected]
    http://www.tangosol.com
    WebLogic Consulting Available
    "Rob Woollen" <[email protected]> wrote in message
    news:[email protected]...
    Dimitri Rakitine wrote:
    Hrm. Gemstone reasons are somewhat different.I'm not a Gemstone expert, but I believe their architecture is quite
    different from a WebLogic cluster. Different architectures might have
    different trade-offs.
    However, out of curiosity, what are their reasons?
    Anyway, here is my question:
    why running multiple instances of WL is more efficient than running
    one
    with
    high execute thread count?The usual reason is that most garbage collectors suspend all of the jvm
    threads. Using multiple WLS instances causes the pauses to be
    staggered. Newer java vms offere incremental collectors as an option so
    this may no longer as big of an issue.
    -- Rob
    >

  • Multi-Processor Performance

    I would like to know what performance gains I might expect from moving our
    weblogic application server to a multi-processor machine. Will 2 processors
    handle twice server the load of the one processor machine?
    Platform: Solaris 2.6
    Weblogic Server: 4.5.1 SP7
    NativeIO enabled
    Weblogic Server is the only thing running on the machine.
    Other Questions:
    1. Is there anything that needs to be done(other than purchase another
    license) for the weblogic server to work on a multi-processor system?
    2. Will the weblogic server naturally take advantage both processors?
    3. Will performance gains be uniform or will certain features gain more
    from multiple processors?
    Any links or suggestions are appreciated.
    thanks,
    Jeremy

    Hi Jeremy -
    If you are interested in modeling this before implementing it to determine
    performance gains, you might want to check out our scalability assessment
    services description, see attached. We are a BEA Technology Alliance Partner
    that specializes in answering those specific performance questions, and have
    done that for a number of clients in the past few weeks.
    (See also eQASEsheet2.pdf) - this describes our capacity sizing tool that works
    particularly well for Weblogic.
    Todd
    jeremy wrote:
    I would like to know what performance gains I might expect from moving our
    weblogic application server to a multi-processor machine. Will 2 processors
    handle twice server the load of the one processor machine?
    Platform: Solaris 2.6
    Weblogic Server: 4.5.1 SP7
    NativeIO enabled
    Weblogic Server is the only thing running on the machine.
    Other Questions:
    1. Is there anything that needs to be done(other than purchase another
    license) for the weblogic server to work on a multi-processor system?
    2. Will the weblogic server naturally take advantage both processors?
    3. Will performance gains be uniform or will certain features gain more
    from multiple processors?
    Any links or suggestions are appreciated.
    thanks,
    Jeremy--
    Todd Wiseman
    Dir/Business Development
    eQASE LLC
    (303)790-4242 x130
    (303)790-2816
    www.eqase.com
    Java Performance & Scalability
    [eQASE WLS Consulting Offerings.pdf]
    [eQASEsheet2.pdf]

  • Multi Processor rendering & editing optimization

    Hello,
    Got some great info here from my last post!  So thanx
    So my question is...is it more ideal to use Xeon or multi processor board setups than single CPU chips?  My main aim is for rendering or workflow turnaround since in the next couple of months I might land a nice spot in the top five post companies in my sector...god willing.
    Therefore I plan to build a completely new system either focused on Multi CPU or buying multi crossfire Open CL rendering GPU cards.  I can't find any documentation or recommendations for improved performances in rendering speeds or realtime fx with a Multi CPU board or the NOW added multi Stream or CUDA GPU (SLI or CrossFire) rendering setups. 
    if anybody could explain any myths or facts as to how Premiere Pro takes advantage of CPUs or GPUs would be a big help.  I'm currently using a Quadro 2000 and an i7-990x with 24gb of memory.
    thnx

    Is your quaddro connected to a 10 bit monitor?
    If not, you would be better served by a faster GTX card
    Best Video Card http://forums.adobe.com/thread/1238382
    Also, view the results of the CS5 Benchmark http://ppbm5.com/ to see what is fast

  • Aggregate Storage And Multi-Threading/Multi-Core Systems

    Please pardon if this question has been asked before, but the Forum search is not returning any relevant results.
    We are in the process of purchasing hardware for an 11.1.2 Essbase environment. We are going 64-bit, on Windows 2008, with either 32 GB or 64 GB of system RAM. The debate we are having is the number of CPUs and cores per CPU. We have not built any ASO databases as of yet, but we plan to launch a major BSO to ASO conversion project once 11.1.2 is off the ground here.
    Historically, with BSO, we did not see performance improvements significant enough to justify the cost of additional CPUs when we ran calcs on multi-CPU systems vs. single or dual CPU systems, even when the settings and design should have taken the most advantage of BSO's multi-threading capabilities. However, it would seem that ASO's design may be able to make better use of multi-core systems.
    I know that there are a lot of factors behind any system's performance, but in general, is ASO in 11.1.2 written well enough to make it worthwhile to consider, say, a four CPU, total 16 core system vs. a 2 CPU, total four core system?

    Grand central dispatch - infancy, not really doing its job, and I don't think apps have to be specifically written for HT, but they do have to not do things that they use to - prevent threads from going to sleep! or be parked.
    high usage is not necessarily high efficiency. often the opposite.
    Windows 7 seems to be optimized for multi-core thanks to a lot of reworking. Intel wants and knows it isn't possible to hand code, that the hardware has to be smarter, too. But the OS has a job, and right now I don't think it does it properly. Or handle memory.
    Gulftown's 12MB cache will help, and over all should be 20% more efficient doing its work.
    With dual processors, and it doesn't look like there are two quick path bridges, data shuffling has led to memory thrashing. Use to be page thrashing with not enough memory. Then core thrashing but having the cores, but not integrated (2008 is often touted as being greatest design so far, but it was FOUR dual-cores, 2009 was the first with a processor that really was new design and (native) 4-core.
    One core should be owned by the OS so it is always available for its own work and housekeeping.
    The iTunes audio bug last year showed how damaging and not to implement code and how a thread could usurp processing and add a high cpu temperature while basically doing nothing, sort of a denial of service attack on the processor - those 80*C temps people had.
    All those new technology features under development and not like OpenCL, GCD and even OpenGL are tested, mature but rather 1.0 foundation for the future. A year ahead of readiness.

  • CPU load unbalanced and too low in multi-processor computers

    I have a rather large test system 5-6000 VIs and we have noted some peculiar behaviour.
    On a single processor system the application can take up to 100% of the available resources.
    On a two processor system the application can take up to 50% of the available resources.
    On a four processor system the application can take up to 25% of the available resources.
    On an eight processor system the application can take up to 12-13% of the available resources.
    I think you guys can get the gist of what I stated above (I didn't get pictures for 1 and 2 CPUs but I have observed the behaviour, personally)
    We haven't done any specific multithreading code (we do lauch many parrallel processing loops dynamically = should be a good thing)
    Why is the application behaving this way? Does anyone have a similar problem? Any tips?
    Thanks for any help you can offer.
    //David

    You really don't provide enough information.
    Is there really always something to do to keep a core busy at all times? Unless there is serious computations involved for solving a math problem, a typical VI should not be using a lot of CPU. (For example if it needs a full core today, it would not have been possible to even run the test a couple of years ago. That would be hard to believe). Don't overestimate how much a modern computer can do using only 5% of the CPU at any given time. I still run an acquisition system on a 120MHz Pentium 1 and LabVIEW 4. There are no performance problems even though the hardware is orders of magnitude slower than even a modern Atom processor on a netbook.
    How many things can really occur at the same time? If you make your code overly sequential by lining everything up along error wires or by overuse of sequence structures, the code cannot be efficiently parallelized, no matter how hard the compiler tries.
    How many of the 6000 VIs are called concurrently? How many require full CPU? If this is a test system, I assume that there is interaction with a device under test? Are the tests sequential or parallel? How many devices are tested at the same time? How much is post-processing compared to waiting for results? Are the tests really CPU limited??? Really???
    Have you done any profiling? Did you identify the part that is most demanding? Could it be that a single greedy loop is consuming most of the CPU doing nothing?
    Except for lengthy simulations or complex data processing, a typical application should never be CPU limited. The timings should be fully software controlled such that the code runs the same, independent of the power of the computer.
    All that said, LabVIEW can easily keep all CPU cores busy if really needed and if programmed correctly and with parallel processing in mind. I have a complicated lengthy fitting code where I was able to keep 64 cores at near 100% (4 AMD 6274 CPUs with 16 cores each). As a more typical example, and compared to sequential execution, the parallelized code is 4.5x faster on a quad core I7 (if I disable hyperthreading in the bios, I get a 3.8x speed increase), so not only can it keep all four cores at 100%, it can even get a measurable boost from hyperthreading. On a six core I7, I get a 6.9x speedup, also keeping all cores busy.
    I am not going to look at a project with 6000 VIs, but please show us some profiling data. Find the VI that carries most of the load and attach it if you want.
    LabVIEW Champion . Do more with less code and in less time .

  • Multi Processor environments

    Just a quick question for ye, no detail really required at this time.
    Is it possible to run a multi threaded Java application in a multi processor environment, where the processors would share the work between them.
    I suppose basically what I am asking is does the JVM have the capabilities to run multiple threads across multiple processors.
    If the answer to this question is yes, how difficult is it to set up or is there any special requirements, or extensions required.
    Cheers

    In most current JVMs, the facilities of the OS to spread the execution across the system's CPU's is provided to the Java programmer quite transparently. Avoid 'green threads' and you are good as gold.
    On Solaris 7 and earlier, it gets tricky to convince the two-level kernel threading mechanism to really use all CPU's (or even more than one). The Sun JVM's for Solaris provide 'unsupported' but often suggested command line options to use 'bound threads' to solve this problem and Java 1.3.0 and 1.3.1 do a much better job. I've run WLS on 10-way 4500 systems and was able to consume about 70% of the 10 CPU's with productive work - principal limitation was our ability to apply load to the system.
    In Solaris 8, there is an alternate thread library that a process can choose to use (just put it in the front of the LD_LIBRARY_PATH). This causes that process to use a one-level (or flat) Solaris thread model which can improve performance (and will definitely increase processor utilization) on larger SMP systems.
    Chuck

  • Java multi-thread Applet and Multi-processor

    Hello,
    I have a JAVA applet which work fine on a mono-processeur machine and not fine at all on multi-processors.
    It use multi thread (for reading on socket) and some times, request are lost.
    Is that a matter of programming or a JVM bug ?
    This happens on Linux and Windows NT bi-processors.
    We hare using JAVA 1.3.0_02
    Thanks for your help
    [email protected]

    I have already have a look to javax.swing.SwingUtilities.invokeLater() but (I think) it don't work for my need.
    A graphic applet which create 2 threads : one for reading and one for writing on a socket.
    Request sent to the server are memorized in a vector, and once answer is received, the request is remove from vector and treated. Access to the list is protected by synchronize.
    Everything works fine one several plateforme (linux, windows 98/2000/NT, Solaris). The only problem is on multi-processor : request are lost !

  • JRE with multi-processors

    Does anybody know whether JRE 1.3 is able to work well in a multi-processor computer with Unix OS
    if so, how to implement this ? which parameters does one have to initilize in the JVM so it would work?
    if not, how does it work with JVM 1.4 if at all

    Threaded code on a single cpu gets timesliced/swapped by the underlying OS but on a multi-CPU system, you get true
    parallel execution for free.
    Scott Oaks & Henry Wong have a chapter on this in the O'Reilly Java Threads book.

  • Flash Player 10 processor system requirement discrepancy

    http://www.ehow.com/info_8526453_flash-player-10-system-requirements.html says that Flash Player 10 on Windows computers requires "a Pentium 4 processor running at 2.33 GHz or an Athalon 64 2800+ processor."
    However, http://www.downloadatoz.com/essentialware/adobe-flash-player/what-is-system-requirement-of -adobe-flash-player-10_g.html says:
    "System Requirements of Adobe Flash Player 10:
    • Windows 2000, XP(SP2 and above), Windows Server, Windows Vista., Macintosh OS X, Linux
    • Intel Pentium 450MHz, AMD Athlon 600MHz processor (for Windows);...(for Mac)"
    My question is: which of those two articles is correct as to what Adobe published as the Pentium processor system requirement for Flash Player 10?
    I see that this question was previously asked on this forum but was never answered, and that the processor system requirement for Flash Player 10 is no longer on Adobe.com

    Flash Player 10 is no longer supported and hasn't been for more than two years. Adobe no longer maintains a listing of system requirements for it since they do not recommend using it on any system that is connected to the Internet, because there are numerous security vulnerabilities with 10 (which have been addressed in newer releases, like 11, 12 & 13).
    I've spent hours trying to find any of the old documentation for versions like 9, 10, or 11, and they simply don't exist. Wikipedia (taken with a grain of salty, naturally) shows that Flash Player 11 was the first version to make a Pentium processor a minimum requirement, but even that doesn't specify a P4.
    Either way, unless you have an extremely old, and extremely slow computer, (ie: single core, less than 1gHz, less than 512mb RAM) Flash Player 10 should install and run, but again, it isn't recommended, as it leaves you vulnerable to attackers.

Maybe you are looking for

  • Third party order process

    HI SD Gurus, I would like to know the process (mainly the list of documents), how is followed for Third party order processing in Indian scenerio. When the vendor is supplying the goods to the customer, what are all the documents needs to be carried

  • Making Bridge web galleries searchable

    I'm sure this will have been asked before on the forum, but after scrolling thought the first four pages of topics I can't see it raised anywhere. Is there an easy way of adding a search engine that will interrogate a file's metadata when creating a

  • Bdc data upload

    I am trying to do bdc for ac02, using session method, data is updating in bdcdata table, its not getting into the database, PERFORM :   fill_bdc_data USING 'SAPLBAS0' '0300' 'X'  ' '  ' ',   fill_bdc_data USING  ''  ''  ''   'BDC_OKCODE' '=NEW',   fi

  • Helpful Tips for all iOS Devices!

    Here's the link for helpful stuff, including news and tips for all iOS devices! El LINKO

  • My safe mode won't come off

    having trouble with my pc